我有点困惑为什么我看到两个陈述之间存在差异。我试图简单地将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
显然我在这里遗漏了一些东西,但肉眼看来它们似乎是一样的。局部变量是否在第二个查询中以某种方式回滚?
答案 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
的值,因此您可以看到数据中的增量。