sql >> Databasteknik >  >> RDS >> Sqlserver

Tilldela resultatet av dynamisk sql till variabel

Du kan använda sp_executesql med output parameter.

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

Resultat:

(No column name)
1

Redigera

I mitt exempel @S är istället för din @template . Som du kan se tilldelar jag ett värde till @x så du måste ändra @template så den tilldelar internt den kommaseparerade strängen till variabeln du definierar i ditt andra argument till sp_executesql . I mitt exempel N'@x int out' . Du vill förmodligen ha en varchar(max) utgångsparameter. Något som N'@Result varchar(max) out'

Här är ett annat exempel på att bygga en kommaseparerad sträng från 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


  1. Jämför prestanda för Windows Azure VM, del 2

  2. Få tabellkolumnnamn i MySQL?

  3. Upprepande värden i en kolumn

  4. Skapar användare med krypterat lösenord i PostgreSQL