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