修复或避免在 SSDT 引用 Azure 托管实例中的主数据库时出现 SQL71501 和 SQL71561 构建错误?
Posted
技术标签:
【中文标题】修复或避免在 SSDT 引用 Azure 托管实例中的主数据库时出现 SQL71501 和 SQL71561 构建错误?【英文标题】:Fix or avoid SQL71501 and SQL71561 build errors in SSDT referencing master DB in Azure Managed Instance? 【发布时间】:2021-10-08 10:58:54 【问题描述】:尽管添加了对主数据库的引用,但我正在将现有数据库转换为 SSDT 项目并收到大量此类错误。它们不能被忽略,因为它们是错误,而不是警告,所以它不会构建。
错误 SQL71501:视图:someschema.someview 有一个未解析的引用 对象 [sys].[dm_hadr_fabric_continuous_copy_status]。
错误 SQL71561:视图:someschema.someview 有一个未解析的引用 对象 [master].[sys].[server_resource_stats].[start_time].
主数据库似乎已过时,无法识别 Azure SQL 托管实例中的多个视图。有没有办法解决这个问题或获得更新的主 dacpac 以便我可以构建这个项目?
【问题讨论】:
【参考方案1】:要解决 SQL71561 构建错误,请遵循:
添加对其他数据库的引用,清除对话框中的“数据库变量”字段。如果不清除此字段,则在进行架构比较时,SSDT 将使用数据库变量名称生成脚本,这将失败。
-
向项目添加数据库引用。
如果另一个数据库是同一解决方案中的另一个项目,您可以在“添加数据库引用”对话框的第一个下拉菜单中选择它。
确保“数据库名称”字段中的文本正确。
清除“数据库变量”字段。
查看“使用示例”文本并验证其是否符合预期。单击“确定”以添加引用,这应该会处理“未解决的引用”错误。
执行此操作后,您将能够进行架构比较,但可能会出现以下错误:
错误 408 SQL00208:无效的对象名称“db.schema.table”。
转到项目属性并取消选中“为公共对象启用扩展 Transact-SQL 验证”将允许项目成功构建。
将现有数据库转换为 SSDT 时,请考虑并遵循以下步骤:
创建一个新的 SSDT 数据库项目
将现有数据库导入该项目,这将重新创建所有脚本文件并更改它们的组织/分组方式
对一些脚本文件进行一些清理,包括部署后脚本
如果是 SQLCLR 项目,请确保主数据库内容正确(创建登录)
4.1 确保在 SSDT 项目的 SQLCLR 属性页中启用并正确配置了 SQLCLR
4.2 将 SQL CLR 的源代码复制到项目的顶层 4.3 添加SQL CLR代码需要的引用
编译
发布
【讨论】:
那个答案不适用。如前所述:“尽管添加了对主数据库的引用,但仍出现大量此类错误。主数据库似乎已过时,无法识别 Azure SQL 托管实例中的多个视图。”以上是关于修复或避免在 SSDT 引用 Azure 托管实例中的主数据库时出现 SQL71501 和 SQL71561 构建错误?的主要内容,如果未能解决你的问题,请参考以下文章
Azure Devops - SSDT DB 构建错误 - 写入 model.xml