31

私はSQL Serverを使用しており、SQLを使用して1つのクエリで複数のテーブルを一度に更新しようとしています:

次のクエリ:

update table1
set A.ORG_NAME =  @ORG_NAME, B.REF_NAME = @REF_NAME
from table1 A, table2 B
where B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID

次のエラー メッセージが表示されます。

マルチパート識別子「A.ORG_NAME」をバインドできませんでした。

エラーメッセージは何を意味していますか?

4

2 に答える 2

52

1 つのステートメントで複数のテーブルを更新することはできませんが、表示されるエラー メッセージはエイリアスが原因です。これを試すことができます。

BEGIN TRANSACTION

update A
set A.ORG_NAME =  @ORG_NAME
from table1 A inner join table2 B
on B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID

update B
set B.REF_NAME = @REF_NAME
from table2 B inner join table1 A
    on B.ORG_ID = A.ORG_ID
    and A.ORG_ID = @ORG_ID

COMMIT
于 2013-02-27T15:36:38.993 に答える
21

次のように 1 つのテーブルのみに影響する場合は、結合で更新できます。

UPDATE table1 
SET table1.name = table2.name 
FROM table1, table2 
WHERE table1.id = table2.id 
AND table2.foobar ='stuff'

しかし、複数のテーブルを結合する更新ステートメントで複数のテーブルに影響を与えようとしています。それは不可能です。

ただし、1 つのステートメントで 2 つのテーブルを更新することは実際には可能ですが、更新する両方のテーブルを含む UNION を使用してビューを作成する必要があります。次に、基になるテーブルを更新するビューを更新できます。

しかし、これはハックなパーラー トリックであり、トランザクションと複数の更新を使用すると、はるかに直感的になります。

于 2013-02-27T15:40:57.017 に答える