代码之家  ›  专栏  ›  技术社区  ›  jamesaharvey

如何在维护外键关系/引用完整性的同时在多个数据库的表之间移动数据?

  •  3
  • jamesaharvey  · 技术社区  · 15 年前

    我试图找出将多个数据库中的两个数据表移动/合并到一个数据库中的最佳方法。

    我有一个类似于以下内容的模式:

    CREATE TABLE Products(
        ProductID int IDENTITY(1,1) NOT NULL,
        Name varchar(250) NOT NULL,
        Description varchar(1000) NOT NULL,
        ImageID int NULL
    )
    
    CREATE TABLE Images (
        ImageID int IDENTITY(1,1) NOT NULL,
        ImageData image NOT NULL
    )
    

    那么,将这些表中包含的数据从多个源数据库移动到具有相同模式的一个目标数据库的最佳方法是什么呢。我的主要问题是维护产品和它们各自的图像之间的链接。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Andomar    15 年前

    在SQL Server中,可以启用标识插入:

    SET IDENTITY_INSERT NewTable ON
    <insert queries here>
    SET IDENTITY_INSERT NewTable OFF
    

    启用idenitity insert时,可以像在任何其他列中一样在identity列中插入值。这允许您仅复制表,例如从链接服务器复制:

    insert into newdb.dbo.NewTable
    select *
    from oldserver.olddb.dbo.OldTable
    
        2
  •  1
  •   HLGEM    15 年前

    我在staging表中预先放置数据(在每个表中添加一个newid列)。我临时向要合并到的表中添加一列,该列是Oldid。我将数据插入父表,将currect oldid放入oldid列。我使用oldid列连接到staging表,以填充staging表中的newid列。现在我有了子表的新FK ID,并使用它们进行了ccan insert。如果您使用的是SQL server 2008,则可以使用OUTPUT子句将旧ID和新ID返回到临时表,然后从临时表使用,而不是添加列。我更喜欢将更改显式存储在staging表中,以解决转换中的问题。最后,如果要添加第三个数据库中的记录,请将oldid列中的值置空;如果要添加第三个数据库中的记录,请将其删除。将阶段表保留大约一个月,以便更容易地研究任何问题。

        3
  •  0
  •   Laurence Gonsalves    15 年前