我想从一个SQL Server数据库导入到另一个数据。 两个数据库都有相同的表格定义等,但数据不同。 主键是自动递增的,所以相同的主键将引用两个DB中的不同数据。
当插入第一个数据库时,我需要更新第二个数据库的主键(显然,引用它们的任何外键)。 我不在乎现在数据是否重复。 有没有办法做到这一点?
你没有说什么版本。 由于我们正在谈论SQL Server,所以有几种方法可以解决这个问题。 如果你使用SQL Server 2005/2008,最简单的方法是使用SQL Server Management Studio中的导入数据function。 实际上,这样做会创build一个SSIS包,允许您将数据带入组合数据库。 这是一个简单的SSIS包的方法,所以外键可能是一个问题。
如果失败,另一个select是使用bcp将数据从表中导出,但不包含主键/外键引用。 这将把数据放在文本文件中。 在这一点上,您可以使用BULK INSERT将数据带入组合数据库。 这里有一个警告,如果外键的列不允许NULL,这种方法将会有问题。
第三个select是自己编写脚本,这也是很容易的。 如果第二个数据库不在您的SQL Server上,则可以将第二个数据库附加到组合数据库所在的SQL Server。 链接的服务器连接也可以工作,但整体上会慢得多。 然后,您可以相应地编写您的INSERT语句,离开主键字段。 对于具有外键引用的表,只要按照正确的顺序加载表,就可以使用JOIN来获取引用的正确值。
第四个选项是构build一个自定义的SSIS包并按顺序加载这些表,并相应地执行查找以确保您拥有正确的外键引用值。 这比第一步更复杂一些,但是它可以确保你做对了。 另外,如果你不得不重复这个练习,你已经有了这个包。 另一个好处是它不需要你创build一个链接服务器连接,并且它将使用最快的可能的插入方法到组合的数据库中。
好吧,因为你听起来像是大多数不相交的数据(不pipe你是否得到一些重复的东西),有一个解决方法,我已经在Postgres中使用, 可能适用:
INSERT语句或其他类似文本和友好的编辑) SERIAL键一样自动填充,那么每行应该得到新的键) 这一切都是基于它们是以这种格式转储数据的简单方法(或者编写一个快速的PHP / ASP /任何脚本来生成SQL也可以…)。 另外请注意,这种技术对庞大的数据集有点难以理解 – 限制因素通常是文本编辑器窒息在一个巨大的文件上。