我正在尝试使用"发布"选项使用 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 月更新包括此问题的修补程序。