21

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

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

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

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

预览会停止,并且不会生成任何脚本。

4

4 回答 4

31

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

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

你有三个选择:

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

  2. 取消选中 ssdt 发布选项中的“验证部署”选项(这很危险,除非您知道其他引用存储过程并知道它们不会中断)

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

于 2015-09-26T01:29:49.970 回答
1

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

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

于 2019-02-28T16:40:28.633 回答
0

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

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

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

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

于 2015-02-19T22:37:16.070 回答
0

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

于 2021-07-07T13:06:30.797 回答