合并SQL Server数据库

时间:2009-09-08 18:31:03

标签: sql sql-server database

我正在尝试将多个SQL Server数据库合并为一个。问题是其中一个表有一个标识字段作为主键。该表还有两个uniqueid字段。类似的东西:

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语句,但不幸的是我需要两个列匹配。

1 个答案:

答案 0 :(得分: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子句无法使用的多个列...