Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Weisen Sie das Ergebnis von dynamischem SQL der Variablen zu

Sie können sp_executesql mit Ausgabeparameter verwenden.

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

Ergebnis:

(No column name)
1

Bearbeiten

In meinem Beispiel @S ist anstelle Ihres @template . Wie Sie sehen, weise ich @x einen Wert zu Sie müssen also @template ändern es weist also intern die durch Kommas getrennte Zeichenfolge der Variablen zu, die Sie in Ihrem zweiten Argument für sp_executesql definieren . In meinem Beispiel N'@x int out' . Sie möchten wahrscheinlich ein varchar(max) Ausgangsparameter. Etwas wie N'@Result varchar(max) out'

Hier ist ein weiteres Beispiel zum Erstellen einer kommagetrennten Zeichenfolge aus 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