Можете да използвате sp_executesql с изходен параметър.
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
Резултат:
(No column name)
1
Редактиране
В моята проба @S
е вместо вашия @template
. Както можете да видите, присвоявам стойност на @x
така че трябва да промените @template
така че вътрешно присвоява разделения със запетая низ на променливата, която дефинирате във втория си аргумент на sp_executesql
. В моята проба N'@x int out'
. Вероятно искате varchar(max)
изходен параметър. Нещо като N'@Result varchar(max) out'
Ето още един пример за изграждане на низ, разделен със запетая, от 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