创建发布预览时的 SSDT 发布错误
SSDT Publish errors on Creating Publish Preview
我正在使用 Visual Studio 2013 来管理包含我们的数据库架构的 .sqlproj 文件。该架构已成功部署数十次。
当试图发布到一个特定的目标数据库时,"Creating publish preview" 步骤似乎失败了,但没有给出错误。预览的输出包括一些预期的警告:
- 正在删除列 {...},可能会丢失数据
- 如果执行此部署,对 {...} 的更改可能会在 {...}
中引入 运行 时间错误
- 此部署在执行期间可能会遇到错误,因为对 {...} 的更改被 {...} 在目标数据库中的依赖项阻止
我没有勾选 "Block incremental deployment if data loss might occur"。
预览刚刚停止,没有生成脚本。
最后一个警告模式似乎不仅仅是一个警告:
This deployment may encounter errors during execution because changes
to {...} are blocked by {...}'s dependency in the target database
似乎是停止其余预览和脚本生成的罪魁祸首。
有趣的是,引入的架构更改不会破坏预览输出中引用的触发器。
当目标数据库中存在一个存储过程(或视图或约束或其他对象)时会发生这种情况,该存储过程未包含在您的 sqlproj 中,它引用了一个 table 将通过部署更改你的 sqlproj。 SSDT 显然无法确定更改是否安全,除非引用的内容包含在您的 sqlproj 中,然后它通过阻止部署在安全方面出错。
禁用"Block incremental deployment if data loss might occur"选项只会放宽数据丢失检查。没有 "Block incremental deployment if run-time errors might occur" 选项。
您有三个选择:
将目标数据库中的任何存储过程、视图或任何内容添加到您的 sqlproj
取消选中 ssdt 发布选项中的 "Verify Deployment" 选项(这很危险,除非您知道其他引用存储过程并且知道它们不会中断)
如果您确定目标数据库中应该存在的所有内容都包含在您的 sqlproj 中,您可以启用 "Drop objects in target but not in source" 选项
问题也可能是由于在数据库对象前添加了错误的架构。例如,在存储过程 SQL 语句中引用了 table,而 table 前面加上了不正确的模式名称。
此外,我们对特定安全组有一些权限,一旦我们删除该解决方案就会重新构建。为了解决错误,请执行项目代码和目标数据库的架构比较。从数据库中删除差异,直到发布功能起作用。您从数据库中删除的最后一项是您的罪魁祸首。
从视图中删除模式绑定允许发布成功,但只有警告
我正在使用 Visual Studio 2013 来管理包含我们的数据库架构的 .sqlproj 文件。该架构已成功部署数十次。
当试图发布到一个特定的目标数据库时,"Creating publish preview" 步骤似乎失败了,但没有给出错误。预览的输出包括一些预期的警告:
- 正在删除列 {...},可能会丢失数据
- 如果执行此部署,对 {...} 的更改可能会在 {...} 中引入 运行 时间错误
- 此部署在执行期间可能会遇到错误,因为对 {...} 的更改被 {...} 在目标数据库中的依赖项阻止
我没有勾选 "Block incremental deployment if data loss might occur"。
预览刚刚停止,没有生成脚本。
最后一个警告模式似乎不仅仅是一个警告:
This deployment may encounter errors during execution because changes to {...} are blocked by {...}'s dependency in the target database
似乎是停止其余预览和脚本生成的罪魁祸首。
有趣的是,引入的架构更改不会破坏预览输出中引用的触发器。
当目标数据库中存在一个存储过程(或视图或约束或其他对象)时会发生这种情况,该存储过程未包含在您的 sqlproj 中,它引用了一个 table 将通过部署更改你的 sqlproj。 SSDT 显然无法确定更改是否安全,除非引用的内容包含在您的 sqlproj 中,然后它通过阻止部署在安全方面出错。
禁用"Block incremental deployment if data loss might occur"选项只会放宽数据丢失检查。没有 "Block incremental deployment if run-time errors might occur" 选项。
您有三个选择:
将目标数据库中的任何存储过程、视图或任何内容添加到您的 sqlproj
取消选中 ssdt 发布选项中的 "Verify Deployment" 选项(这很危险,除非您知道其他引用存储过程并且知道它们不会中断)
如果您确定目标数据库中应该存在的所有内容都包含在您的 sqlproj 中,您可以启用 "Drop objects in target but not in source" 选项
问题也可能是由于在数据库对象前添加了错误的架构。例如,在存储过程 SQL 语句中引用了 table,而 table 前面加上了不正确的模式名称。
此外,我们对特定安全组有一些权限,一旦我们删除该解决方案就会重新构建。为了解决错误,请执行项目代码和目标数据库的架构比较。从数据库中删除差异,直到发布功能起作用。您从数据库中删除的最后一项是您的罪魁祸首。
从视图中删除模式绑定允许发布成功,但只有警告