修复或避免在 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 托管实例无法创建或还原数据库

具有跨国复制的 Azure 托管实例故障转移

我可以备份存储在 Azure 托管实例中的服务主密钥吗?

Azure Devops - SSDT DB 构建错误 - 写入 model.xml

SSDT 项目未在 azure v12 数据库的 Visual Studio 2012 中加载

Azure 托管 SQL - ODBC 驱动程序