Você pode usar sp_executesql com parâmetro de saída.
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
Na minha amostra
@S é em vez de seu @template . Como você pode ver, eu atribuo um valor a @x então você precisa modificar @template então ele atribui internamente a string separada por vírgulas à variável que você define em seu segundo argumento para sp_executesql . Na minha amostra N'@x int out' . Você provavelmente quer um varchar(max) parâmetro de saída. Algo como N'@Result varchar(max) out' Aqui está outro exemplo construindo uma string separada por vírgulas 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