set @i=行号=@i+1 这是什么语法呀,等号可以连续赋值

aaabbb09 2011-02-12 05:05:56
set @i=行号=@i+1 这是什么语法呀,等号可以连续赋值

set @i=行号=@i+1

本以为是错误的语法,自己测试了一下,竟然是正确的,我晕了,以前没见过这种语法呀?


drop table #tb

create table #tb(autoid int identity(581080,1),行号 int,b varchar(10))

insert #tb (b)
select 'aaa' union all
select 'bbb' union all
select 'ccc' union all
select 'ddd' union all
select 'eee'

--以下代码为何执行正确呢?
-- set @i=行号=@i+1 这是什么语法呀,等号可以连续赋值
declare @i int
set @i = 0
update #tb set @i=行号=@i+1

select *
from #tb
...全文
788 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaabbb09 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sql77 的回复:]

declare @i int
set @i = 0
update #tb set @i=行号=@i+1


UPDATE
{
table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
……
[/Quote]
谢谢,原来联机帮助上有呀!
feixianxxx 2011-02-13
  • 打赏
  • 举报
回复
按ctrl+l 看执行计划吧
abuying 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ssp2009 的回复:]

SQL code

update #tb set @i=行号=@i+1
--等于
update #tb set @i=行号,@id=@i+1
[/Quote]
顶啊!
guguda2008 2011-02-12
  • 打赏
  • 举报
回复
你就把它拆成@i=@i+1和行号=@i+1看就行了
叶子 2011-02-12
  • 打赏
  • 举报
回复
先执行右边的等号
快溜 2011-02-12
  • 打赏
  • 举报
回复
反了
set 行号=@i,@id=@i+1
SQL77 2011-02-12
  • 打赏
  • 举报
回复
declare @i int
set @i = 0
update #tb set @i=行号=@i+1


UPDATE
{
table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
}
SET
{ column_name = { expression | DEFAULT | NULL }
| @variable = expression
| @variable = column = expression } [ ,...n ]
-狙击手- 2011-02-12
  • 打赏
  • 举报
回复
查看执行计划,首先进行标量计算@i = @I +1 ,然后就更新到列
快溜 2011-02-12
  • 打赏
  • 举报
回复

update #tb set @i=行号=@i+1
--等于
update #tb set @i=行号,@id=@i+1
王向飞 2011-02-12
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20101223/10/ffcc1e6f-92ce-4479-bf07-1de46bf2a9bf.html
如果你能抽时间把精华帖都看一遍的话,就不会有这疑问了

34,874

社区成员

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

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