我正在尝试将多个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语句,但不幸的是我需要两个列匹配。
答案 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子句无法使用的多个列...