使用MERGE INTO合并来自不同数据库的2个表

时间:2013-11-12 18:01:09

标签: sql sql-server merge

我想使用MERGE将来自不同数据库的2个表合并到一个表中。两个数据库都在同一台服务器上。

目前,我可以执行以下操作:

USE Northwind2

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

但是,我需要将结果合并到一个表中。我以为我可以这样做:

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

这将返回错误说明以下内容:

  

Msg 10739,Level 15,State 1,Line 10
  MERGE语句中使用的插入列列表不能包含多部分标识符。改为使用单个部件标识符。

我不确定如何删除多部分标识符并仍然有这项工作...因为我需要定义我们正在查找的数据库。

关于如何解决这个问题的任何想法?任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

这对我有用:

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,因此您无法在那里使用它。无需多部件标识符。