SSDT 生成错误 SQL71501/71502 引用元数据生成的对象时

SSDT Build Error SQL71501/71502 When referencing metadata generated objects

提问人:Geezer 提问时间:8/1/2023 更新时间:8/1/2023 访问量:41

问:

在我们的 SSDT 项目中,我们有许多对象(表、视图、过程、函数)是使用元数据作为部署后脚本的一部分创建的。

我们遇到的问题是,一些非元数据创建的对象在引用这些元数据创建的对象时无法构建,显然有 或 错误。因为他们尝试引用的内容实际上尚未创建,也未存在于 SSDT 项目中。SQL71501SQL71502

SQL71501:视图:[dbo]。[whatever] 具有对对象的未解析引用 [架构]。[功能]。[专栏]

SQL71502:程序:[dbo]。[proc_name] 有一个未解析的引用 对象 [schema]。[table_name.[专栏]

目前,我们通过创建这些 objects.eg 的“存根”来解决这个问题。

-- stub implementation of metadata-managed object for SSDT

CREATE FUNCTION [schema].[functionName] (
  @param DATETIME
) RETURNS TABLE
AS RETURN

SELECT
  NULL AS [RecordId]
, CAST(NULL AS DATETIME) AS [FromDateTime]
, CAST(NULL AS NVARCHAR(255)) AS [name]
...
WHERE 0 = 1

这是有效的,但是,当我们必须创建这些对象的虚拟版本以允许 SSDT 构建时,它会破坏元数据创建对象的对象。

我的问题是,有没有其他方法可以解决这个问题?

sql-server msbuild sql-server-data-tools

评论

0赞 Dmitrij Kultasev 8/2/2023
不能引用在预脚本中创建的对象。你为什么需要它?
0赞 Geezer 8/2/2023
就像我在问题中说的,当我们必须创建这些对象的虚拟版本以允许 SSDT 构建时,它有点破坏了元数据创建的对象的对象。我想知道是否有替代方法。@DmitrijKultasev
0赞 Ben Thul 8/2/2023
出于好奇,这些元数据创建的对象之一的示例是什么?具体来说,元数据定义的表超出了我的想象(其他表是纯代码的,我可以想象可能会与未知的多个表相对)。
0赞 Geezer 8/3/2023
@BenThul 在几个元数据表中定义表结构(表名、列名、数据类型、区分大小写等)。编写一些动态 SQL 以从元数据表中读取以创建表
0赞 Dmitrij Kultasev 8/4/2023
不能在 SSDT 中引用不存在的对象。唯一的例外可能是存储过程。其他方法将是解决方法,例如您对虚拟对象所做的解决方法。可能有很多方法可以解决它。SSDT 项目仅包含 XML 和普通 DDL 文件,因此您可以根据需要操作它们。每种解决方法都是独一无二的,具体取决于要求

答: 暂无答案