update 更新语句疑问

yibey 2011-06-02 01:19:39
最近写了几个关于



DECLARE @A INT
SET @A = -1

UPDATE #t
SET
@A = CASE WHEN A IS NOT NULL THEN A ELSE @A END,
A = @A


但是我发现把它写成

UPDATE #t
SET
A = @A,
@A = CASE WHEN A IS NOT NULL THEN A ELSE @A END


这样后结果是一样的每次都先执行@A的判断然后在执行A字段的赋值,请问大家知道这是为什么么,,

update语句的赋值语句是不分先后还是咋的
...全文
66 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn 2011-06-02
  • 打赏
  • 举报
回复
--#1.同一个update中,变量的值优先计算
--#2.如果存在多个变量,按从上到下的顺序计算
--#3.注意SQL的'同一'原则, 就是说,在同一个SQL语句中,引用的字段值全部是未改变时的值.例:
UPDATE #t
SET @A = CASE WHEN A IS NOT NULL THEN A ELSE @A END, --#1.第一步进行
A = @A, --#3.第三步进行,会把A字段更新成'1'
@A = '1' --#2.第二步进行
B = A --#4.第四步进行. 注意:里面的字段A的值是未更新前的值,而不是#3中更新后的值。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
记住是从左到右 变量优先
[/Quote]
yibey 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]

记住是从左到右 变量优先
[/Quote]
谢谢了
--小F-- 2011-06-02
  • 打赏
  • 举报
回复
记住是从左到右 变量优先
君_洛洛 2011-06-02
  • 打赏
  • 举报
回复
都是行执行 @A = CASE WHEN A IS NOT NULL THEN A ELSE @A END
最后再赋值给A

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧