2008-10-16 55 views
0

我有一个DTS包引起了“复制SQL Server对象”任务的错误。该任务是复制从一个的SQL Server 2000 SP4的服务器到另一个(同一版本)的表加数据,并给出错误: -使用DTS复制检查约束时发生错误

找不到检查“dbo.MyTableName”约束,虽然该表被标记有一个。

源表有一个检查约束定义,似乎会导致问题。在运行DTS包后,这件事看起来可以正常工作 - 表中的所有约束和数据都在目标服务器上创建?但是上面的错误会导致后续步骤无法运行。

任何想法为什么会引发此错误?

回答

2

这表明sys表中的元数据与实际模式不同步。如果您没有看到任何其他更普遍的腐败迹象,则通过将表格复制到另一个表格(从旧表格中选择* into newtable)来重建表格,删除旧表格,然后重命名新表格并替换约束条件帮帮我。这与2000年的企业管理器在插入不在表末尾的列时做的事情类似,所以在表中间插入新列,然后删除将实现同样的事情,如果你不喜欢不想手动编写查询。

如果您发现其他类似的错误,我会对整个数据库的状态有些担忧。 (我在这里假设你已经完成了CHECKDB命令并且错误持续存在......)

0

当新列(具有检查约束)添加到现有表时,此错误开始。调查我有: -

  • 将表复制到不同的目标SQL Server并得到相同的错误。
  • 创建一个具有完全相同结构但名称不同的新表,并且没有错误地进行复制。
  • 删除并重新创建问题表上的检查约束,但仍然得到相同的错误。
  • 带有ALL_ERRORMSGS的dbcc checktable('MyTableName')不会给出任何错误。
  • 源数据库和目标数据库中的dbcc checkdb不会提供任何错误。

有趣的DTS包出现: -

  • 复制表。
  • 复制数据。
  • 创建约束

由于检查约束创建时间为7分钟表之后创建时间即它创建的检查约束之后已经移动的数据。具有意义,因为它不需要检查正在复制的数据,大概可以提高性能。

正如戈德克所说,我认为系统表中有些东西已经变得腐败,因为具有相同列的新表工作正常。即使DBCC语句没有提供任何错误?