Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Assegna il risultato di sql dinamico a variabile

È possibile utilizzare sp_executesql con il parametro di output.

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

Risultato:

(No column name)
1

Modifica

Nel mio esempio @S è invece del tuo @template . Come puoi vedere assegno un valore a @x quindi devi modificare @template quindi assegna internamente la stringa separata da virgole alla variabile che definisci nel tuo secondo argomento a sp_executesql . Nel mio esempio N'@x int out' . Probabilmente vuoi un varchar(max) parametro di uscita. Qualcosa come N'@Result varchar(max) out'

Ecco un altro esempio che costruisce una stringa separata da virgole da 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