Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Atribuir resultado do sql dinâmico à variável


Você pode usar sp_executesql com parâmetro de saída.
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

Na minha amostra @S é em vez de seu @template . Como você pode ver, eu atribuo um valor a @x então você precisa modificar @template então ele atribui internamente a string separada por vírgulas à variável que você define em seu segundo argumento para sp_executesql . Na minha amostra N'@x int out' . Você provavelmente quer um varchar(max) parâmetro de saída. Algo como N'@Result varchar(max) out'

Aqui está outro exemplo construindo uma string separada por vírgulas 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