1

我有一个 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];

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

为什么没有创建约束?

如果我单独运行脚本,则创建工作和启用工作。

4

1 回答 1

1

这确实将成为每日 WTF 的条目。

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

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

  2. 添加一些数据

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

当然,步骤 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"
于 2012-11-13T10:02:49.120 回答