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

问题描述 投票:6回答:3

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

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

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

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

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

sql-server-data-tools dacpac
3个回答
13
投票

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

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

你有三个选择:

  1. 将目标数据库中的任何存储过程,视图或其他内容添加到sqlproj中
  2. 取消选中ssdt发布选项中的“验证部署”选项(除非您了解其他引用的sproc并知道它们不会中断,否则这很危险)
  3. 如果您确定目标数据库中应存在的所有内容都包含在sqlproj中,则可以启用“在目标中但不在源中删除对象”选项

1
投票

该问题也可能是由于在数据库对象之前使用了错误的模式。例如,在存储过程SQL语句中引用的表以及前面带有错误模式名称的表。

此外,我们对特定安全组拥有一些权限,一旦我们删除解决方案,将再次构建。为了解决错误,请执行项目代码和目标数据库的模式比较。删除与数据库的差异,直到发布功能正常工作。您从数据库中删除的最后一项是您的罪魁祸首。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.