Sql 仅在两个数据库之间复制数据
我试图只在两个SQL server 2008数据库之间复制数据。我需要保持现有存储的进程和函数完好无损,只复制数据。DB模式是相同的,但我遇到了PK的问题 我首先尝试:Sql 仅在两个数据库之间复制数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我试图只在两个SQL server 2008数据库之间复制数据。我需要保持现有存储的进程和函数完好无损,只复制数据。DB模式是相同的,但我遇到了PK的问题 我首先尝试: EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'DELETE FROM ?' 删除所有数据。但是得到 Failure inserting into the read-only column 因此,我随
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
删除所有数据。但是得到
Failure inserting into the read-only column
因此,我随后尝试在所有表中设置IDENTITY_INSERT,方法是:
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? SET IDENTITY_INSERT ON'
没有运气
如果只在两个数据库之间导出数据,而保留原始过程和函数不变,那么最好的方法是什么
谢谢
编辑:我使用SQL导出将数据从源复制到目标。我需要保留目标数据库的进程和函数,只需复制数据。只需从第二个数据库中的所有表pkey中删除标识规范 这里可能发生的情况是,在两个数据库中都有pkey作为标识列,在第一个数据库中这样做是有意义的,但不能将其值复制到另一个标识列中
无论如何,您都不希望pkey在第二个db中作为标识pkey,那么,所有外键都无法工作。只需从第二个db中的所有表pkey中删除标识规范即可 这里可能发生的情况是,在两个数据库中都有pkey作为标识列,在第一个数据库中这样做是有意义的,但不能将其值复制到另一个标识列中
无论如何,您不会希望pkey在第二个db中作为标识pkey,那么,您的所有外键都不会工作。我可能会从另一个角度来处理它:通过SQL Enterprise Manager将所有对象编写到一个文件中,并在空白数据库上运行此文件。这样,第二个数据库中就有了所有的元数据,但没有实际的数据,以后可以将其用于其他副本。我可能会从另一个角度来处理它:通过SQL Enterprise Manager将所有对象脚本化到一个文件中,并在空白数据库上运行此文件。这样,您将在第二个数据库中拥有所有元数据,但没有实际数据,并且您可以在将来将其用于其他副本。您得到的错误看起来不像PK冲突或身份问题。我看到两个可能的原因:
您得到的错误看起来不像PK冲突或身份问题。我看到两个可能的原因:
最后,我对这两个答案都有了不同的看法。我使用第三个数据库作为临时数据库 1) 我对我需要的数据库进行了完整备份(实时)
2) 我已将此备份还原到我的临时数据库。
3) 我编写了我需要的数据库的脚本,只编写了过程和函数的脚本,并使用DROP和IF INCLUDES编写了脚本。
4) 我在temp数据库上运行了来自#3的脚本,提供了来自DB1的数据以及来自DB2的procs和func
5) 我使用临时数据库备份中的覆盖恢复了DB2。
谢谢大家,如果可以的话,我会把所有的答案都标记为正确的。我最后给出了两个答案的变化。我使用第三个数据库作为临时数据库 1) 我对我需要的数据库进行了完整备份(实时)
2) 我已将此备份还原到我的临时数据库。
3) 我编写了我需要的数据库的脚本,只编写了过程和函数的脚本,并使用DROP和IF INCLUDES编写了脚本。
4) 我在temp数据库上运行了来自#3的脚本,提供了来自DB1的数据以及来自DB2的procs和func
5) 我使用临时数据库备份中的覆盖恢复了DB2。
谢谢大家,如果我可以的话,我会把所有的都标记为正确的。嗨,为了摆脱你的限制,请阅读我写的这篇关于这个主题的博文
嗨,为了摆脱你的约束,请阅读我写的这篇关于这个主题的博文
看起来您不需要在第二个表中保留现有数据,只需在第一个表中创建数据的精确副本即可。正确吗?不,目标数据库将没有数据,但我需要保持过程和函数的完整性。我要用DELETE FROM删除目标数据库?上级指挥部;在我开始之前,它会有数据。因此,它将是一个包含数据的空数据库。看起来您不需要在第二个表中保留现有数据,只需要在第一个表中创建数据的精确副本。正确吗?不,目标数据库将没有数据,但我需要保持过程和函数的完整性。我要用DELETE FROM删除目标数据库?上级指挥部;在我开始之前,它会有数据。因此,它将是一个包含数据的空数据库。是否有一种全局方法可以轻松地恢复?谢谢,有没有一种全球性的方法可以让我很容易恢复?感谢您编辑您的答案,更明确地定义对应关系