2009-09-08 105 views
0

我试图将多个SQL Server数据库合并为一个。问题是其中一个表有一个标识字段作为主键。该表还有两个唯一的字段。喜欢的东西:合并SQL Server数据库

datatable: 
id pk identity 
link1 uniqueid 
link2 uniqueid 

我最初的想法是运行以下脚本:

declare @maxId as int 
set @maxId = (SELECT IsNull(MAX(id),0) FROM datatable) 
SET IDENTITY_INSERT datatable ON 
INSERT INTO database1.datatable id, link1, link2 SELECT id + @maxId, link1, link2 FROM database2.datatable 
SET IDENTITY_INSERT datatable OFF 

其中一期工程,除了是查询运行了多次的数据被复制。 确保link1和link2的组合不存在于我的表格中的最佳方法是什么?

如果只有一列我可以使用IN语句,但不幸的是我需要两个colums匹配。

回答

1

你提到IN,所以我假设你想合并链接列。 这种方式可以安全地运行多次并避免IDENTITY列问题。

INSERT INTO database1.datatable (link1, link2) 
SELECT link1, link2 
FROM database2.datatable d2 
WHERE NOT EXISTS (SELECT * 
    FROM 
     database1.datatable d1 
    WHERE 
     d1.link1 = d2.link1 and d1.link2 and d2.link2) 

如果这是错的,你仍然可以使用EXISTS/NOT EXISTS处理与IN子句不能...

+0

完全信息,我一直在寻找多列。谢谢。 – Kyle 2009-09-08 19:40:20