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



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

问题是:SSDT 尝试从我的目标中删除我的引用架构中不存在的索引numero,但失败,因为它正通过约束fk_numero用于外键强制实施。此外键稍后将在脚本中删除,因为要对此表进行其他更改。

我曾考虑过在预部署脚本中删除fk_numero,但由于稍后在生成的脚本中调用DROP CONSTRAINT fk_numero,它无论如何都会失败:由于 SSDT 在删除约束之前不会编写IF EXISTS测试,因此在尝试删除不存在的内容时会失败。

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

SSDT 中是否有一个选项来指定是否希望它生成DROP CONSTRAINT脚本?还是指令订单的选项?或者一种向 SSDT 暗示它应该在尝试删除约束之前测试约束是否存在的方法?

您可以尝试"在目标中而不是在项目中放置对象"选项。

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

我在使用 SSDT 时刚刚遇到了这个问题。事实证明,这是一个已知的错误,已在Microsoft Connect上报告。但是,它似乎尚未解决。

更新:

SSDT 的 2015 年 5 月更新包括此问题的修补程序。

最新更新