How does chaining variable assignments work in SQL?

sql, sql-server, t-sql, variables

Solution

DECLARE @Var1 MONEY = 100, @Var2 MONEY = 50 

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

SELECT  @Var1, @Var2  

Returns

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

So at in that case they were executed in Left to Right order but this cannot be relied upon!

If there are multiple assignment clauses in a single SELECT statement, SQL Server does not guarantee the order of evaluation of the expressions. Note that effects are only visible if there are references among the assignments.

Source http://msdn.microsoft.com/en-us/library/ms187953.aspx

Problem

I'm analyzing some old SQL code in a stored procedure. ``` Declare @Var1 money, @Var2 money, @Var3 money, ``` etc... ``` Select @Var1 = OldValue, @Var2 = @Var1, ``` etc... So I'm wondering how these assignments work when they are both in the same select statement. I'm assuming Var2 = OldValue after the select is called, but I want to be sure. What are the rules surrounding this situation? Are the assignments executed in the order that they are declared? If so, what value would be assigned to Var2 in the following case: ``` Select @Var2 = @Var1, @Var1 = OldValue, ``` Thanks!

Original source