链接变量赋值如何在SQL中工作?

Bre*_*ett 7 sql t-sql sql-server variables

我正在分析存储过程中的一些旧SQL代码.

Declare @Var1 money, 
    @Var2 money, 
    @Var3 money, 
Run Code Online (Sandbox Code Playgroud)

等等...

Select @Var1 = OldValue, 
       @Var2 = @Var1, 
Run Code Online (Sandbox Code Playgroud)

等等...

所以我想知道这些分配在同一个select语句中是如何工作的.在调用select之后,我假设Var2 = OldValue,但我想确定.

这种情况有哪些规则?分配是按照声明的顺序执行的吗?如果是这样,在以下情况下将为Var2分配什么值:

Select @Var2 = @Var1,
       @Var1 = OldValue,
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mar*_*ith 9

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

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

SELECT  @Var1, @Var2  
Run Code Online (Sandbox Code Playgroud)

返回

--------------------- ---------------------
50.00                 50.00
Run Code Online (Sandbox Code Playgroud)

所以在那种情况下,他们是按照从左到右的顺序执行的,但这不能依赖!

如果单个SELECT语句中有多个赋值子句,则SQL Server不保证表达式的计算顺序.请注意,只有在分配中有引用时才会显示效果.

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