Puede usar sp_executesql con el parámetro de salida.
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
En mi muestra @S
es en lugar de su @template
. Como puede ver, asigno un valor a @x
entonces necesitas modificar @template
por lo que internamente asigna la cadena separada por comas a la variable que define en su segundo argumento a sp_executesql
. En mi muestra N'@x int out'
. Probablemente quieras un varchar(max)
parámetro de salida Algo así como N'@Result varchar(max) out'
Aquí hay otro ejemplo construyendo una cadena separada por comas 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