导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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

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])

...全文
44 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告