使用标识列在两个SQL数据库之间迁移数据

时间:2018-09-18 09:16:47

标签: sql sql-server

这是场景...我有两个数据库(A和B),它们的架构相同,但记录不同。我想将B's数据传输到数据库A中的相应表中。

假设我们在两个数据库中都有名为QuestionAnswer的表。数据库AQuestion表中包含10条记录,在Answer表中包含30条记录。这两个表的标识列Id都以1(&自动递增)开头,并且QuestionAnswer之间存在1对多的关系。

在数据库B中,我们在Question表中有5个条目,在Answer中有20个条目。

我的要求是将两个表的数据从源DB B复制到目标DB A,而在标识列中没有任何冲突,同时在数据传输期间保持两个表之间的关系。

任何解决方案或潜在的解决方法都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

在这里我不会写SQL,但是我认为可以做到。确保使用“身份插入”打开和关闭。

  1. 从数据库A中获取两个表的最大值,例如A_maxidquestionA_maxidanswer
  2. 从B_question中选择。在选择列中添加派生列QuestionID+A_maxidquestion。这将是您的新ID。
  3. 从B_Answer中选择。在选择列中,将派生的col AnswerID+A_maxidanswer和fk id添加为QuestionID+A_maxidquestion

注意-确保在插入过程中,其他任何过程都不使用Destination表来插入值

答案 1 :(得分:0)

类似这样的最佳方法之一是使用OUTPUT子句。 https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017您可以插入新的父代并捕获新插入的标识值,以用于插入子代。

如果您还包括一个临时表,可以保存原始标识值和新标识值,则可以进行此设置。

我没有最好的表格详细信息。