错误的DDL语句顺序:在删除相关外键约束之前删除索引

时间:2015-01-13 13:58:54

标签: sql sql-server sql-server-data-tools

我正在尝试使用发布选项使用SQL Server数据工具更新目标数据库。我有自定义指令的预部署和部署后脚本。

问题在于:SSDT尝试从我的目标中删除索引numero,但索引fk_numero在我的参考架构中不存在,但由于它被约束fk_numero用于外键实施而失败。此外键稍后将在脚本中删除,因为此表上将进行另一项更改。

我已经考虑过在我的预部署脚本中删除DROP CONSTRAINT fk_numero,但是无论如何它都会失败,因为生成的脚本中稍后会调用IF EXISTS:因为SSDT没有写{{1}在删除约束之前测试,在尝试删除不存在的东西时失败。

我还尝试使用NOCHECK CONSTRAINT ALL禁用预部署脚本中的所有外键,希望我能够删除索引,但无济于事。

SSDT中是否有选项指定是否要生成DROP CONSTRAINT脚本?或指示订单的选项?或者提示SSDT它应该在尝试删除约束之前测试约束是否存在?

2 个答案:

答案 0 :(得分:0)

您可以尝试“在目标中但不在项目中的DROP对象”选项。

您是否使用自定义脚本来修改架构?

答案 1 :(得分:0)

我在使用SSDT时遇到了这个问题。原来这是一个已知的bug,已在Microsoft Connect上报告。但是,它似乎没有得到解决。

更新:

SSDT的May 2015 Update包含针对此问题的修复程序。