如何迁移使用主键和自动增量值 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条记录后检索自动增量值

SQL 创建表并设置自动增量值而不更改表

如何在sql中获取下一个自动增量值

在迁移中更改自动增量值(PostgreSQL 和 SQLite3)

SQL如何实现主键数字自动增加?(SQLSERVER)

sql server 中 怎么让自动增1的主键列 临时的 让它可以手动插入指定值?