Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用标识列在两个SQL数据库之间迁移数据_Sql_Sql Server - Fatal编程技术网

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

使用标识列在两个SQL数据库之间迁移数据,sql,sql-server,Sql,Sql Server,下面是一个场景。。。我有两个数据库(A和B),它们的模式相同,但记录不同。我想将B的数据传输到DBA中相应的表中 假设两个数据库中都有名为Question和Answer的表。DBA在问题表中包含10条记录,在答案表中包含30条记录。两个表都有标识列Id,从1开始(&auto increment),并且Question和Answer之间有1对多的关系 在DBB中,我们在问题表中有5个条目,在答案中有20个条目 我的要求是将两个表的数据从源数据库B复制到目标数据库A,在数据传输过程中保持两个表之间的

下面是一个场景。。。我有两个数据库(A和B),它们的模式相同,但记录不同。我想将
B的
数据传输到DB
A
中相应的表中

假设两个数据库中都有名为
Question
Answer
的表。DB
A
问题
表中包含10条记录,在
答案
表中包含30条记录。两个表都有标识列
Id
,从1开始(&auto increment),并且
Question
Answer
之间有1对多的关系

在DB
B
中,我们在
问题
表中有5个条目,在
答案
中有20个条目

我的要求是将两个表的数据从源数据库
B
复制到目标数据库
A
,在数据传输过程中保持两个表之间的关系时,标识列中不存在任何冲突


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

我不会在这里编写SQL,但以下是我认为可以做到的。确保启用和禁用标识插入

  • 从DB A中获取两个表的maxid,比如
    A_maxidquestion
    A_maxidanswer
  • 从B_问题中选择。在选择列中添加派生列
    QuestionID+A_maxidquestion
    。这将是您的新ID
  • 从B_答案中选择。在选择列中,添加派生列
    AnswerID+A_maxidanswer
    和fk id作为
    QuestionID+A_maxidquestion

    注意-确保在插入值时,目标表未被任何其他进程用于插入值

    我不会在此处编写SQL,但我认为可以这样做。确保启用和禁用标识插入

  • 从DB A中获取两个表的maxid,比如
    A_maxidquestion
    A_maxidanswer
  • 从B_问题中选择。在选择列中添加派生列
    QuestionID+A_maxidquestion
    。这将是您的新ID
  • 从B_答案中选择。在选择列中,添加派生列
    AnswerID+A_maxidanswer
    和fk id作为
    QuestionID+A_maxidquestion

    注意-在插入值时,请确保目标表未被任何其他进程用于插入值。执行类似操作的最佳方法之一是使用OUTPUT子句。您可以插入新的父项并捕获新插入的标识值,您可以使用该标识值插入子项

    如果还包括一个临时表,该临时表将保存原始标识值和新标识值,则可以根据需要进行设置


    没有表的详细信息,这是我能做的最好的事情。

    解决类似问题的最佳方法之一是使用OUTPUT子句。您可以插入新的父项并捕获新插入的标识值,您可以使用该标识值插入子项

    如果还包括一个临时表,该临时表将保存原始标识值和新标识值,则可以根据需要进行设置


    没有表的详细信息,这是我能做的最好的事情。

    生成插入脚本并在所需的数据库中执行。您确实应该提供一些关于表的详细信息。是一个很好的开始。生成插入脚本并在所需的数据库中执行。您确实应该提供有关表的一些详细信息。这是一个很好的开始。这是相当脆弱的。如果在运行这些插入时系统中有其他人会发生什么情况?SeanLange-是的,这是可能的,但有人提到这是一个迁移,尽管我添加了注释。这非常脆弱。如果在运行这些插入时系统中有其他人会发生什么情况?SeanLange-是的,这是可能的,但有人提到这是一个迁移,尽管我已经添加了注释。