Ausgabe mit den variables in SQL server

Declare @week1 varchar(max)='value 1' Declare @week2 varchar(max)='value 2' declare @sql varchar(max) declare @i int=1 while(@i<=2) begin set @sql='print @week'+cast(@i as varchar(6))+'' exec(@sql) set @i=@i+1 end 

Nachdem ich das ausgeführt habe, bekomme ich Fehler:

Msg 137, Stufe 15, Zustand 2, Zeile 2 Muss die Skalarvariable "@ week1" deklarieren. Msg 137, Stufe 15, Zustand 2, Zeile 2 Muss die Skalarvariable "@ week2" deklarieren.

Es ist eine Frage des scopes. Sie können nicht auf Variable aus dynamischen sql, wenn Sie sie in der dynamischen sql deklarieren. Wenn du EXEC (@sql) zum printingen (@sql) änderst, wirst du sehen, dass das, was du ausführen willst, das ist …

 print @week1 print @week2 

Wenn Sie nach folgendem Ergebnis suchen …

 value 1 value 2 

… dann versuchen Sie, Ihren Code zu ändern …

 DECLARE @sql VARCHAR(MAX) = 'DECLARE @week1 VARCHAR(MAX) = ''value 1'', @week2 VARCHAR(MAX) = ''value 2'';'; DECLARE @i INT = 1; WHILE (@i <= 2) BEGIN SET @sql = @sql + ' print @week' + CAST(@i AS VARCHAR(6)) + ''; SET @i = @i + 1; END; EXEC (@sql); 

… was das erzeugt und ausführt …

 DECLARE @week1 VARCHAR(MAX) = 'value 1', @week2 VARCHAR(MAX) = 'value 2'; print @week1 print @week2