如何迁移使用主键和自动增量值 SQL 2008 R2 的两个数据库
Posted
技术标签:
【中文标题】如何迁移使用主键和自动增量值 SQL 2008 R2 的两个数据库【英文标题】:How to Migrating two databases which using Primary key and auto increment value SQL 2008 R2 【发布时间】:2014-09-06 17:58:48 【问题描述】:我有 2 个数据库。两者都包含相同的表设计 DB1 和 DB2。两者都有不同的数据。我需要将 DB2 集成到 DB1。 DB1 包含自动递增的主键。我需要将 DB2 数据插入 DB1 顶部。表示 DB1 主键 = DB2+ DB1 id 的顶部。
即,如果 DB1 包含 1,2,3,4,5,而 DB2 也包含 1,2,3,4,5。 当我将数据从 DB2 插入 DB1 时,DB2 中的数据将变为 6、7、8、9、10。 但我需要 1,2,3,4,5 作为 DB2 和 6,7,8,9,10 作为 DB1 数据..
提前致谢 吉度
【问题讨论】:
这只是一个表还是有使用这些主键的依赖表? 【参考方案1】:尝试以下查询:
DECLARE @MaxId INT
SELECT @MaxId = MAX(Id) FROM Db1
SET IDENTITY_INSERT db1 ON
INSERT INTO Db1(Id, Column1, Column2, ...)
SELECT @MaxId+ ROW_NUMBER()OVER(ORDER BY Id),
Column1,
Column2,
...
FROM db2
SET IDENTITY_INSERT db1 OFF
【讨论】:
【参考方案2】:Mehdi 已经接近您想要的,但似乎没有完全理解您的要求,只需对他的代码进行一些更改,这很容易实现。
DECLARE @MaxId INT
SELECT @MaxId = MAX(Id) FROM Db2 /* changed this to Db2 */
SET IDENTITY_INSERT db1 ON
/* increment all the id's in db1 to the max of db2 plus there current id to allow room for DB2 to enter */
UPDATE Db1 SET Id = @MaxId + Id
/*Now insert all of DB2's values in to DB1 with there original Id's*/
INSERT INTO Db1(Id, Column1, Column2, ...)
SELECT Id
Column1,
Column2,
...
FROM db2
SET IDENTITY_INSERT db1 OFF
【讨论】:
以上是关于如何迁移使用主键和自动增量值 SQL 2008 R2 的两个数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在单个查询(sql server)中插入1条记录后检索自动增量值