Te traemos el hallazgo a este atolladero, o por lo menos eso deseamos. Si continuas con inquietudes dínoslo y sin dudar
Solución:
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 tu @template
. Como puedes ver le asigno un valor a @x
entonces tienes que modificar @template
por lo que internamente asigna la coma separada string a la variable que defina en su segundo argumento para sp_executesql
. en mi muestra N'@x int out'
. Probablemente quieras un varchar(max)
parámetro de salida Algo como N'@Result varchar(max) out'
Aquí hay otro ejemplo construyendo una coma separada string 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
podrías usar sp_executesql
en lugar de exec
. Eso le permite especificar un parámetro de salida.
declare @out_var varchar(max);
execute sp_executesql
N'select @out_var = ''hello world''',
N'@out_var varchar(max) OUTPUT',
@out_var = @out_var output;
select @out_var;
Esto imprime “hola mundo”.
La mayoría de estas respuestas utilizan sp_executesql como la solución a este problema. Descubrí que existen algunas limitaciones al usar sp_executesql, en las que no entraré, pero quería ofrecer una alternativa usando EJECUTIVO(). Estoy usando SQL Server 2008 y sé que algunos de los objetos que estoy usando en este script no están disponibles en versiones anteriores de SQL Server, así que tenga cuidado.
DECLARE @CountResults TABLE (CountReturned INT)
DECLARE
@SqlStatement VARCHAR(8000) = 'SELECT COUNT(*) FROM table'
, @Count INT
INSERT @CountResults
EXEC(@SqlStatement)
SET @Count = (SELECT CountReturned FROM @CountResults)
SELECT @Count
Más adelante puedes encontrar las anotaciones de otros sys admins, tú también tienes la opción de dejar el tuyo si lo crees conveniente.