Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Attribuer le résultat de sql dynamique à la variable

Vous pouvez utiliser sp_executesql avec le paramètre de sortie.

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

Résultat :

(No column name)
1

Modifier

Dans mon exemple @S est à la place de votre @template . Comme vous pouvez le voir, j'attribue une valeur à @x vous devez donc modifier @template il affecte donc en interne la chaîne séparée par des virgules à la variable que vous définissez dans votre deuxième argument à sp_executesql . Dans mon exemple N'@x int out' . Vous voulez probablement un varchar(max) paramètre de sortie. Quelque chose comme N'@Result varchar(max) out'

Voici un autre exemple de construction d'une chaîne séparée par des virgules à partir 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