2

MERGE を使用して、異なるデータベースの 2 つのテーブルを 1 つのテーブルにマージしたいと考えています。両方のデータベースが同じサーバー上にあります。

現在、次のことができます。

USE Northwind2

SELECT a.CategoryID 
FROM Northwind.dbo.Categories a 
INNER JOIN Northwind2.dbo.Categories b ON a.CategoryID = b.CategoryID

ただし、結果を 1 つのテーブルにマージする必要があります。私はこのようなことができると思いました:

USE Northwind2

MERGE INTO Categories B
USING (
  SELECT E.CategoryID
  FROM Northwind.dbo.Categories) E
ON (B.CategoryID = E.CategoryID)
WHEN MATCHED THEN
  //update the table
WHEN NOT MATCHED THEN
  //insert into the table

これにより、次のエラーが返されます。

メッセージ 10739、レベル 15、状態 1、行 10
MERGE ステートメントで使用される挿入列リストには、マルチパート識別子を含めることはできません。代わりに、単一部分の識別子を使用してください。

マルチパート識別子を削除して、まだこの作業を行う方法がわかりません...どのデータベースを調べているかを定義する必要があるためです。

これを回避する方法についてのアイデアはありますか? どんな助けでもいただければ幸いです

4

1 に答える 1

3

これは私のために働く:

MERGE INTO db1.dbo.TempCat B
USING (
  SELECT CategoryID
  FROM db2.dbo.TempCat) E
ON (B.CategoryID = E.CategoryID)
WHEN MATCHED THEN
  UPDATE SET CategoryID = E.CategoryID
WHEN NOT MATCHED THEN
  INSERT (CategoryID) VALUES (E.CategoryID);

E.問題は余分だったと思いますSELECT-あなたはEを定義しているので、そこでは使用できません。マルチパート識別子は必要ありません。

于 2013-11-12T18:53:29.683 に答える