Saltar al contenido

Asignar resultado de sql dinámico a variable

Te traemos el hallazgo a este atolladero, o por lo menos eso deseamos. Si continuas con inquietudes dínoslo y sin dudar

Solución:

Puede usar sp_executesql con el parámetro de salida.

declare @S nvarchar(max) = 'select @x = 1'

declare @xx int
set @xx = 0

exec sp_executesql @S, N'@x int out', @xx out

select @xx

Resultado:

(No column name)
1

Editar

en mi muestra @S es en lugar de tu @template. Como puedes ver le asigno un valor a @x entonces tienes que modificar @template por lo que internamente asigna la coma separada string a la variable que defina en su segundo argumento para sp_executesql. en mi muestra N'@x int out'. Probablemente quieras un varchar(max) parámetro de salida Algo como N'@Result varchar(max) out'

Aquí hay otro ejemplo construyendo una coma separada string de master..spt_values

declare @template nvarchar(max)
set @template = 
'select @Result += cast(number as varchar(10))+'',''
from master..spt_values
where type = ''P''
'

declare @CommaString varchar(max)
set @CommaString = ''

exec sp_executesql @template, N'@Result varchar(max) out', @CommaString out

select @CommaString

podrías usar sp_executesql en lugar de exec. Eso le permite especificar un parámetro de salida.

declare @out_var varchar(max);
execute sp_executesql 
    N'select @out_var = ''hello world''', 
    N'@out_var varchar(max) OUTPUT', 
    @out_var = @out_var output;
select @out_var;

Esto imprime “hola mundo”.

La mayoría de estas respuestas utilizan sp_executesql como la solución a este problema. Descubrí que existen algunas limitaciones al usar sp_executesql, en las que no entraré, pero quería ofrecer una alternativa usando EJECUTIVO(). Estoy usando SQL Server 2008 y sé que algunos de los objetos que estoy usando en este script no están disponibles en versiones anteriores de SQL Server, así que tenga cuidado.

DECLARE @CountResults TABLE (CountReturned INT)
DECLARE 
    @SqlStatement VARCHAR(8000) = 'SELECT COUNT(*) FROM table'
    , @Count INT

INSERT @CountResults
EXEC(@SqlStatement)

SET @Count = (SELECT CountReturned FROM @CountResults)
SELECT @Count

Más adelante puedes encontrar las anotaciones de otros sys admins, tú también tienes la opción de dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *