2010-11-11 73 views
0

我试图仅在两个SQL Server 2008数据库之间复制数据。我需要保持现有的存储过程和函数不变并仅复制数据。数据库模式是相同的,但即将遇到PK的问题。仅在两个数据库之间复制数据

我第一次尝试:

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导出,将数据复制从源到目的地。我需要保留目标数据库特效和功能,只复制数据。

+1

看起来你并不需要保存在第二个表现有数据,而只是使数据的精确副本中的第一个。那是对的吗? – 2010-11-11 20:36:57

+0

不,目标数据库将没有数据,但我需要保持特效和funcs完好无损。我将使用DELETE FROM擦除目标数据库?上面的命令;在我开始之前它会有数据。因此它将是一个包含数据的空数据库。 – Jammin 2010-11-11 20:40:31

回答

1

我可能会从另一个角度来看待它:通过将所有对象通过SQL企业管理器编写到文件中并在空白数据库上运行此文件。这样,您将拥有所有元数据,但第二个数据库中没有实际数据,您可以将其用于未来的其他副本。

2

刚刚从第二数据库中的所有表pkeys删除身份规范。

什么是可能在这里发生的是,你必须p键在这两个DBS标识列,它是有道理的第一个这样做的,但你不能复制它的值写入另一个身份列。

无论如何,你不希望pkey作为第二个分区中的身份密钥,那么你的所有外键都不起作用。

+0

有没有这样做的全球方式,我可以轻松地恢复后?谢谢 – Jammin 2010-11-11 21:15:12

1

你所得到的错误似乎并不像一个PK违规或身份问题。我看到了两个可能的原因:

  1. 如果您收到试图插入数据时出错,我会检查表有任何computed columns。许多程序在导出数据时未考虑到它们,并将计算列包含在插入列列表中。

  2. 如果在删除步骤中出现该错误,可能是因为删除触发了一个触发器,它会尝试插入数据并因某种原因失败(这些触发器的想法是保留已删除的副本数据在另一个位置)。如果是这种情况,请修复插入或者只是禁用触发器。

0

我在最后回答了这两个问题。我使用第三个数据库作为临时数据库。

1)我做了数据库的完整备份,我需要(live)的数据
2)我将这个备份恢复到了我的临时数据库。
3)I脚本我需要从,仅脚本特效和funcs中,并使用DROP和IF包括特效和功能数据库。
4)我从#3运行脚本到临时数据库,从DB1获得数据,从DB2获取特效和funcs
5)我从临时数据库的备份中使用OVERWRITE恢复DB2。

如果可以的话,非常感谢你们的家人。

+0

您可以编辑您的答案,更明确地定义(DB1,DB2,DB3)名称与(“临时数据库”,“实时”目标数据库)之间的对应关系。 “我用第三个数据库作为临时数据库”是指“临时数据库”是DB3?那么4)不清楚。 DB2是目标数据库?我无法理解你为什么需要这些手工操作的“临时数据库”!? – 2010-11-13 03:21:04

相关问题