Как цепочки назначений переменных работают в SQL? - PullRequest
7 голосов
/ 22 апреля 2011

Я анализирую какой-то старый код SQL в хранимой процедуре.

Declare @Var1 money, 
    @Var2 money, 
    @Var3 money, 

и т.д ...

Select @Var1 = OldValue, 
       @Var2 = @Var1, 

и т.д ...

Поэтому мне интересно, как эти назначения работают, когда они находятся в одном и том же операторе select. Я предполагаю, Var2 = OldValue после вызова выбора, но я хочу быть уверен.

Каковы правила, окружающие эту ситуацию? Выполняются ли назначения в том порядке, в котором они объявлены? Если это так, какое значение будет присвоено Var2 в следующем случае:

Select @Var2 = @Var1,
       @Var1 = OldValue,

Спасибо!

Ответы [ 3 ]

9 голосов
/ 22 апреля 2011
DECLARE @Var1 MONEY = 100, @Var2 MONEY = 50 

SELECT @Var1 = @Var2, 
       @Var2 = @Var1 

SELECT  @Var1, @Var2  

Возвращает

--------------------- ---------------------
50.00                 50.00

Таким образом, в этом случае они выполнялись в порядке слева направо , но на это нельзя полагаться!

Если в одном операторе SELECT имеется несколько предложений присваивания, SQL Server не гарантирует порядок вычисления выражений.Обратите внимание, что эффекты видны только при наличии ссылок среди назначений.

Источник http://msdn.microsoft.com/en-us/library/ms187953.aspx

1 голос
/ 22 апреля 2011

Почему бы вам не сделать это, если вы хотите, чтобы @ val2 имел то же значение, что и @ val1

  Select @Var2 = OldValue,
         @Var1 = OldValue, 
1 голос
/ 22 апреля 2011

В случае @ var2 = @ var1 сначала я полагаю, что var2 равен NULL. Они будут типами значений, поэтому в фоновом режиме не будет никаких ссылок, как это было бы в языке, подобном .Net

Вы всегда можете протестировать, извлекая SQL-код, помещая результаты в табличную переменную, а затем выбирая ее, чтобы увидеть, что у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...