我使用Visual Studio 2013来管理包含我们的数据库架构的.sqlproj文件。该架构已成功部署了数十次。
尝试发布到一个特定目标数据库时,“创建发布预览”步骤似乎失败,但未给出错误。预览的输出包括一些预期的警告:
我已取消选中“如果可能发生数据丢失,则阻止增量部署”。
预览只是停止,没有生成脚本。
当目标数据库中存在未包含在sqlproj中的存储过程(或视图或约束或其他对象)时,会发生这种情况,该存储过程引用将通过部署sqlproj而更改的表。 SSDT显然无法确定更改是否安全,除非您的sqlproj中包含引用的东西,然后通过阻止部署在安全方面出错。
禁用“如果可能发生数据丢失则阻止增量部署”选项仅放宽数据丢失检查。如果可能发生运行时错误,则没有“阻止增量部署”选项。
你有三个选择:
该问题也可能是由于在数据库对象之前使用了错误的模式。例如,在存储过程SQL语句中引用的表以及前面带有错误模式名称的表。
此外,我们对特定安全组拥有一些权限,一旦我们删除解决方案,将再次构建。为了解决错误,请执行项目代码和目标数据库的模式比较。删除与数据库的差异,直到发布功能正常工作。您从数据库中删除的最后一项是您的罪魁祸首。
最后一个警告模式似乎不仅仅是一个警告:
此部署在执行期间可能会遇到错误,因为{...}的更改会被{...}在目标数据库中的依赖性阻止
似乎是阻止预览的其余部分和脚本生成的罪魁祸首。
有趣的是,引入的模式更改不会破坏预览输出中引用的触发器。