1

update ステートメントでテーブル変数を参照する際に問題があります。列を使用できないようです@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
4

2 に答える 2

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

ところで、以下も機能します。

update @a 
set 
    name = f.name 
from 
( 
    select 
        id, 
        name 
    from @b 
) f 
where 
    [@a].id = f.id 
于 2012-09-04T19:43:17.103 に答える
0

@a.id への参照は、その時点でテーブルが範囲外であるため、不正です。あなたが試すかもしれないものは次のとおりです:

Update @a
  set name = f.name
  from @b g
  join @a f
    on g.id=f.id
于 2012-09-04T19:44:04.247 に答える