sql >> Database >  >> RDS >> Sqlserver

Wijs resultaat van dynamische sql toe aan variabele

U kunt sp_executesql gebruiken met de uitvoerparameter.

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

Resultaat:

(No column name)
1

Bewerken

In mijn voorbeeld @S is in plaats van uw @template . Zoals je kunt zien, ken ik een waarde toe aan @x dus je moet @template wijzigen dus het wijst intern de door komma's gescheiden tekenreeks toe aan de variabele die u definieert in uw tweede argument aan sp_executesql . In mijn voorbeeld N'@x int out' . U wilt waarschijnlijk een varchar(max) uitvoerparameter. Iets als N'@Result varchar(max) out'

Hier is nog een voorbeeld van het bouwen van een door komma's gescheiden tekenreeks van 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


  1. Is INSERT RETURNING gegarandeerd om dingen in de juiste volgorde te retourneren?

  2. SQL INSERT INTO… SELECT Voorbeelden

  3. INSERT en UPDATE een record met behulp van cursors in orakel

  4. ScaleGrid voegt Oracle Cloud toe voor beheerde databasehosting