我正在分析存储过程中的一些旧SQL代码。
Declare @Var1 money,
@Var2 money,
@Var3 money,
等...
Select @Var1 = OldValue,
@Var2 = @Var1,
等...
所以我想知道这些分配在同一个select语句中是如何工作的。在调用select之后,我假设Var2 = OldValue,但我想确定。
围绕这种情况有哪些规则?分配是按照声明的顺序执行的吗?如果是这样,在以下情况下将为Var2分配什么值:
Select @Var2 = @Var1,
@Var1 = OldValue,
谢谢!
答案 0 :(得分:9)
DECLARE @Var1 MONEY = 100, @Var2 MONEY = 50
SELECT @Var1 = @Var2,
@Var2 = @Var1
SELECT @Var1, @Var2
返回
--------------------- ---------------------
50.00 50.00
所以在这种情况下,他们是按照从左到右的顺序执行的但是这是不可靠的!
如果有多个作业 单个SELECT语句中的子句, SQL Server不保证 评估顺序 表达式。请注意效果是 仅在有参考时才可见 在任务中。
答案 1 :(得分:1)
在@ var2 = @ var1的情况下,我认为var2是NULL .-它们将是值类型,因此在后台没有像在.Net这样的语言中进行任何引用/ p>
你可以随时通过提取sql代码来测试,将结果推入表变量然后从中选择以查看你拥有的内容。
答案 2 :(得分:1)
如果您希望@ val2与@ val1
具有相同的值,为什么不这样做呢? Select @Var2 = OldValue,
@Var1 = OldValue,