SQL语句中Update字段的先后顺次是怎样的?

秋天之落叶 2019-01-23 11:43:16
SQL Server 2014版本 数据表ceshi,字段 a、b 数据类型float

update ceshi set a=0,b=0
update ceshi set a=2,b=a*10
select * from ceshi

b字段的值不是想象中的20,而是0。
再运行2次update ceshi set a=2,b=a*10,则其值为20。

如果单纯的 update ceshi set a=2,b=10,则不受影响。难道b赋值时还取不到a的值?

请高手解读一下,为什么会这样?a和b是同步赋值吗?为什么第三次update的值就正常了?
如果我想使结果为 2和20,只能分开两个Update语句吗?

...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
halqj 2019-02-23
  • 打赏
  • 举报
回复
楼主已经把问题解决了,这一点我很佩服,但不知是否能共享一下XLSReadWritell6,要不传份到我的邮箱也行的halqjiang@126.com
秋天之落叶 2019-01-24
  • 打赏
  • 举报
回复
update ceshi set a=0,b=0
update ceshi set a=2
update ceshi set b=a*10
select * from ceshi
这样结果是正确的,写成一句,如何写?
秋天之落叶 2019-01-24
  • 打赏
  • 举报
回复
原来如此,习惯使用循环了,这次遇到了新问题,哈哈。
感谢!
shoppo0505 2019-01-24
  • 打赏
  • 举报
回复
update是根据原值计算的,而不是使用同一语句中的更新值计算。
如果根据你原先的理解,试想,如果需要更新两列,相互都有关联,那是不是无限循环下去了?
Hello World, 2019-01-24
  • 打赏
  • 举报
回复
update更新语句先变量,后字段,变量按出现顺序更新,字段同时更新,应该是更新前生成了deleted表再生成inserted表,inserted表取了deleted表的数据来更新,所以是“同时”更新的

update table1 set @v1=a, @v2=b, a=@v2, b=@v1, c=d, d=c where ......
吉普赛的歌 版主 2019-01-24
  • 打赏
  • 举报
回复
declare @v int
set @v=2
update ceshi set a=@v, b=@v*10
追求“一句”意义不大, 不需要在上面过多计较。 正确性、可读性、可扩展性、可重用性 才是写代码需要考虑的。
xiaoxiangqing 2019-01-24
  • 打赏
  • 举报
回复
只能取原值,是取不到修改后的值的

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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