SSDT在创建发布预览时发布错误

时间:2015-02-19 22:37:16

标签: sql-server-data-tools dacpac

我正在使用Visual Studio 2013来管理包含我们的数据库架构的.sqlproj文件。该架构已成功部署了数十次。

尝试发布到一个特定目标数据库时,"创建发布预览"步骤似乎失败,但没有给出错误。预览的输出包括一些预期的警告:

  • 正在删除列{...},可能会发生数据丢失
  • 如果执行此部署,对{...}的更改可能会在{...}
  • 中引入运行时错误
  • 此部署在执行期间可能会遇到错误,因为{...}的更改被目标数据库中的{...}依赖性阻止

我已取消选中"如果可能发生数据丢失,则阻止增量部署"。

预览刚停止,没有生成脚本。

4 个答案:

答案 0 :(得分:12)

当目标数据库中存在未包含在sqlproj中的存储过程(或视图或约束或其他对象)时,会发生这种情况,该存储过程引用将通过部署sqlproj而更改的表。 SSDT显然无法确定更改是否安全,除非您的sqlproj中包含引用的东西,然后通过阻止部署在安全方面出错。

禁用“如果可能发生数据丢失则阻止增量部署”选项只会放松数据丢失检查。如果可能发生运行时错误,则没有“阻止增量部署”选项。

您有三种选择:

  1. 将目标数据库中的任何存储过程,视图或其他内容添加到sqlproj

  2. 取消选中ssdt发布选项中的“验证部署”选项(这是危险的,除非你知道其他引用的sprocs并知道它们不会破坏)

  3. 如果您确定目标数据库中应存在的所有内容都包含在您的sqlproj中,则可以启用“在目标中删除对象但不在源中删除”选项

答案 1 :(得分:1)

该问题也可能是由于在数据库对象之前添加了错误的架构而引起的。例如,在存储过程SQL语句中引用了一个表,并且该表前面带有错误的架构名称。

此外,我们对特定的安全组具有一定的权限,一旦删除该解决方案,便会重新构建。为了解决错误,请对项目代码和目标数据库进行模式比较。从数据库中删除差异,直到发布功能起作用为止。从数据库中删除的最后一项是罪魁祸首。

答案 2 :(得分:0)

最后一个警告模式似乎不仅仅是警告:

  

由于更改,此部署在执行期间可能会遇到错误   {...}被{...}在目标数据库中的依赖性阻止

似乎是阻止预览的其余部分和脚本生成的罪魁祸首。

有趣的是,引入的架构更改不会破坏预览输出中引用的触发器。

答案 3 :(得分:0)

从视图中删除模式绑定允许发布成功,只有警告