更新包含多个集的语句

时间:2015-06-02 19:23:43

标签: sql

我有点困惑为什么我看到两个陈述之间存在差异。我试图简单地将INT列递增1,因此将值设置为1,2,3,4等:

QUERY#1产生所需的结果:

DECLARE @a int
SET @a = 0
UPDATE #jc_TEMP 
SET num = @a, @a=@a+1  

QUERY#2将所有行设置为0:

DECLARE @a int
SET @a = 0
UPDATE #jc_TEMP 
SET num = @a
SET @a=@a+1  

显然我在这里遗漏了一些东西,但肉眼看来它们似乎是一样的。局部变量是否在第二个查询中以某种方式回滚?

1 个答案:

答案 0 :(得分:3)

因为第二个" UPDATE"实际上是两个单独的陈述

1 - DECLARE @a int 
2 - SET @a = 0 
3 - UPDATE #jc_TEMP 
      SET num = @a 

4 - SET @a=@a+1

UPDATE将所有行设置为值@a(即0),然后 next 语句递增@a

您的第一个UPDATE

1 - DECLARE @a int
2 - SET @a = 0
3 - UPDATE #jc_TEMP 
      SET num = @a,
          @a=@a+1 

为每行增加@a 的值,因此您可以看到数据中的增量。