我在更新语句中引用表变量时遇到问题。似乎我无法使用@a.id
列(编译器说它未被声明)。
以下示例仅用于说明问题,这意味着我知道我可以解决当前示例中重命名列id并避免@a.id
引用的问题,但它不是选项,我真的不能这样做。我看到一些解决方案使用from语句来对要更新的表进行别名,但是在这个例子中我使用from语句来做其他事情。还有另一种解决方法吗?
declare @a table
(
id int not null,
name varchar(100) null
)
insert into @a (id, name) values (1, null)
insert into @a (id, name) values (2, null)
insert into @a (id, name) values (3, null)
declare @b table
(
id int not null,
name varchar(100) null
)
insert into @b (id, name) values (1, 'one')
insert into @b (id, name) values (2, 'two')
update @a
set
name = f.name
from
(
select
id,
name
from @b
where
id = @a.id
) f
where
@a.id = f.id
答案 0 :(得分:1)
尝试这样的事情:
declare @a table
(
id int not null,
name varchar(100) null
)
insert into @a (id, name) values (1, null)
insert into @a (id, name) values (2, null)
insert into @a (id, name) values (3, null)
declare @b table
(
id int not null,
name varchar(100) null
)
insert into @b (id, name) values (1, 'one')
insert into @b (id, name) values (2, 'two')
update upd
set
name = [@b].name
from @a AS upd
INNER JOIN @b
ON upd.id = [@b].id
以下BTW也会奏效:
update @a
set
name = f.name
from
(
select
id,
name
from @b
) f
where
[@a].id = f.id
答案 1 :(得分:0)
对@ a.id的引用是非法的,因为该表超出了范围。以下是您可能会尝试的内容:
Update @a
set name = f.name
from @b g
join @a f
on g.id=f.id