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

时间:2011-04-22 16:09:45

标签: sql sql-server tsql variables

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

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

等...

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

等...

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:9)

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 :(得分:1)

在@ var2 = @ var1的情况下,我认为var2是NULL .-它们将是值类型,因此在后台没有像在.Net这样的语言中进行任何引用/ p>

你可以随时通过提取sql代码来测试,将结果推入表变量然后从中选择以查看你拥有的内容。

答案 2 :(得分:1)

如果您希望@ val2与@ val1

具有相同的值,为什么不这样做呢?
  Select @Var2 = OldValue,
         @Var1 = OldValue,