表变量与临时表,更新语句在语法上为何有这样的区别呢?

chouqin680 2007-12-01 04:51:42
表变量与临时表,更新语句在语法上为何有这样的区别呢?

declare @a table (
id int,
num int
)

insert into @a
select 1,100
union all select 2,200
union all select 3,400

declare @b table (
id int,
num2 int
)

insert into @b
select 1,50
union all select 2,80
union all select 3,110

--下面写法就会报错
update @a set @a.num=@a.num-@b.num2
from @a inner join @b on (@a.[id]=@b.[id])

--写面下列写法就正确,不知为什么,必须另外指定别名才行
update a set a.num=a.num-b.num2
from @a a inner join @b b on (a.[id]=b.[id])

...全文
63 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Limpire 2007-12-02
不知为什么
---------
不为什么,MS不让你这么干
  • 打赏
  • 举报
回复
cxmcxm 2007-12-01
加上别名用于减少二义性,也简化了sql server的编译难度
  • 打赏
  • 举报
回复
netcup 2007-12-01
楼上说的有道理!
  • 打赏
  • 举报
回复
hb_gx 2007-12-01
这是语法问题

毕竟 @a 是一个变量,试想能用变量当别名吗?



  • 打赏
  • 举报
回复
chouqin680 2007-12-01
表变量与临时表,更新语句在语法上为何有这样的区别呢?

declare @a table (
id int,
num int
)

insert into @a
select 1,100
union all select 2,200
union all select 3,400

declare @b table (
id int,
num2 int
)

insert into @b
select 1,50
union all select 2,80
union all select 3,110

--下面写法就会报错
update @a set @a.num=@a.num-@b.num2
from @a inner join @b on (@a.[id]=@b.[id])

--写面下列写法就正确,不知为什么,必须另外指定别名才行
update a set a.num=a.num-b.num2
from @a a inner join @b b on (a.[id]=b.[id])


  • 打赏
  • 举报
回复
chouqin680 2007-12-01
表变量与临时表,更新语句在语法上为何有这样的区别呢?

declare @a table (
id int,
num int
)

insert into @a
select 1,100
union all select 2,200
union all select 3,400

declare @b table (
id int,
num2 int
)

insert into @b
select 1,50
union all select 2,80
union all select 3,110


--下面写法就会报错
update @a set @a.num=@a.num-@b.num2
from @a inner join @b on (@a.[id]=@b.[id])

--写面下列写法就正确,不知为什么,必须另外指定别名才行
update a set a.num=a.num-b.num2
from @a a inner join @b b on (a.[id]=b.[id])



  • 打赏
  • 举报
回复
chouqin680 2007-12-01
表变量与临时表,更新语句在语法上为何有这样的区别呢?

declare @a table (
id int,
num int
)

insert into @a
select 1,100
union all select 2,200
union all select 3,400

declare @b table (
id int,
num2 int
)

insert into @b
select 1,50
union all select 2,80
union all select 3,110



--下面写法就会报错
update @a set @a.num=@a.num-@b.num2
from @a inner join @b on (@a.[id]=@b.[id])

--写面下列写法就正确,不知为什么,必须另外指定别名才行
update a set a.num=a.num-b.num2
from @a a inner join @b b on (a.[id]=b.[id])




  • 打赏
  • 举报
回复
发帖
MS-SQL Server

3.4w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2007-12-01 04:51
社区公告
暂无公告