sql >> Base de Datos >  >> RDS >> Sqlserver

Asignar resultado de sql dinámico a variable

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 su @template . Como puede ver, asigno un valor a @x entonces necesitas modificar @template por lo que internamente asigna la cadena separada por comas a la variable que define en su segundo argumento a sp_executesql . En mi muestra N'@x int out' . Probablemente quieras un varchar(max) parámetro de salida Algo así como N'@Result varchar(max) out'

Aquí hay otro ejemplo construyendo una cadena separada por comas 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