再探SQL Update語句的執行順序

DengXingJie 2009-10-30 04:07:49
http://topic.csdn.net/u/20090904/16/e5dad9c7-fb59-41b9-b28d-e3b71c3e8420.html
以前曾發過類似的貼,見上面鏈接
得到的結論是: 从左到右,变量优先,逐行更新.

現有如下代碼,似乎與上面的的結論對不上

declare @str varchar(10)
set @str='Test'
update #t set Field1=@str,Field2=Field1

結果Field2並不等於Field1

請大家說說原因,
當然類似update #t set Field1=@str,Field2=@str這種實現方法就不用說出來了
謝謝!
...全文
506 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bancxc 2009-10-30
  • 打赏
  • 举报
回复
果然是变量优先 呢
--小F-- 2009-10-30
  • 打赏
  • 举报
回复
create table #t (field1 varchar(10),field2 varchar(10))
insert #t select 'a','b'
declare @str varchar(10)
set @str='Test'
update #t set Field1=@str,@str=Field2,Field2=Field1
select * from #t
drop table #t
/*field1 field2
---------- ----------
b a

(1 行受影响)*/
bancxc 2009-10-30
  • 打赏
  • 举报
回复
create table #t (field1 varchar(10),field2 varchar(10))
insert #t select 'a','b'
declare @str varchar(10)
update #t set Field1=Field2,Field2=Field1
select * from #t
/*
field1 field2
---------- ----------
b a
*/
bancxc 2009-10-30
  • 打赏
  • 举报
回复
字段之间同时更新
declare @str varchar(10)
set @str='Test'
update #t set Field1=Field2,Field2=Field1
csdyyr 2009-10-30
  • 打赏
  • 举报
回复
这种方法不可靠。
feixianxxx 2009-10-30
  • 打赏
  • 举报
回复
create table #t (field1 varchar(10),field2 varchar(10))
insert #t select 'a','b'
declare @str varchar(10)
set @str='Test'
update #t set Field1=@str,Field2=@str
select * from #t
--drop table #t
/*
field1 field2
---------- ----------
Test Test

*/

。。。
feixianxxx 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dengxingjie 的回复:]
各位可能弄錯我的意思了

SQL codedeclare@strvarchar(10)set@str='Test'update #tset Field1=@str,Field2=Field1
此代碼執行後Field1是等於'Test'了,但Field2卻沒有等於Test
我最終的目的是要Field2=Field1='Test',並且想用上面代碼的方式實現
[/Quote]
这个是2字段同时更新.
所以...OK?
feixianxxx 2009-10-30
  • 打赏
  • 举报
回复
1, 先变量再字段
2, 变量之间, 从左到右
3, 字段之间, 并行执行
DengXingJie 2009-10-30
  • 打赏
  • 举报
回复
各位可能弄錯我的意思了

declare @str varchar(10)
set @str='Test'
update #t set Field1=@str,Field2=Field1

此代碼執行後Field1是等於'Test'了,但Field2卻沒有等於Test
我最終的目的是要Field2=Field1='Test',並且想用上面代碼的方式實現
--小F-- 2009-10-30
  • 打赏
  • 举报
回复
--你这样试下
declare @str varchar(10)
set @str='Test'
update #t set Field1=@str,@str=Field2,Field2=Field1
happy664618843 2009-10-30
  • 打赏
  • 举报
回复
从左到右,变量优先,逐行更新. jf
--小F-- 2009-10-30
  • 打赏
  • 举报
回复
从左到右 变量优先

34,576

社区成员

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

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