Visual Studio数据库项目约束失败

时间:2012-11-12 10:00:48

标签: sql-server visual-studio-2012

我有一个Visual Studio数据库项目,其中包含一系列具有外键约束的表。

发布脚本包含添加约束脚本:

ALTER TABLE [dbo].[AttributeValue] WITH NOCHECK
ADD CONSTRAINT [FK_AttributeValue_Attribute] 
FOREIGN KEY ([AttributeId]) REFERENCES [dbo].[Attribute] ([AttributeId]);

在脚本的最后,它启用了约束:

ALTER TABLE [dbo].[AttributeValue] WITH CHECK CHECK CONSTRAINT [FK_AttributeValue_Attribute];

问题是,它无法启用约束,因为它认为它不存在。如果我检查表格,我可以确认它不存在。

为什么没有创建约束?

如果我单独运行脚本,则create可以正常运行。

1 个答案:

答案 0 :(得分:1)

这真的是每日WTF的参赛作品。

有人在项目中添加了一个构建后的脚本,执行以下步骤。

  1. 通过检查系统表来删除所有约束

  2. 添加一些数据

  3. 尝试通过检查系统表再次创建约束

  4. 当然,第3步什么都不做,因为在系统表中没有找到任何东西,因为它删除了第1步中的所有内容。

    我对这个计划感到震惊,并将用以下内容取而代之:

    第1步

    EXEC sp_MSforeachtable @command1="print 'Disabling constraints: ?'", @command2="ALTER TABLE ? NOCHECK CONSTRAINT all"
    

    第3步

    EXEC sp_MSforeachtable @command1="print 'Enabling constraints: ?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"