无法使用视图定义中具有表的完全限定名称的视图编译 SSDT 数据库项目

Posted

技术标签:

【中文标题】无法使用视图定义中具有表的完全限定名称的视图编译 SSDT 数据库项目【英文标题】:Unable to compile SSDT Database Project with a view that has fully qualified name of table in view definition 【发布时间】:2021-06-04 16:27:32 【问题描述】:

我们有一个 SQL 2019 数据库,其中所有表名在以数据库名开头的视图中都是完全限定的。我们无法避免完全限定引用,因为视图定义是自动生成的(否则我根本不会完全限定它们)。当通过引用与视图相同的数据库中的表来定义视图时,SSDT 项目会抱怨它有一个未解析的引用。

Visual Studio 不允许添加对其自身的数据库引用。我可以编译它的唯一方法是创建同一数据库的 DACPAC,然后将其添加为引用以及删除数据库变量 ($Name)。

是否有任何其他方法可以在视图中提供完全限定的表名,而无需在 SSDT 项目中创建 DACPAC?

【问题讨论】:

是否可以创建同义词而不是这些对象并在其中定义这 3-4 个部分名称? 【参考方案1】:

我知道的唯一方法是将视图代码从项目中取出并在部署后脚本中处理。这是设计使然,因为数据库名称可能不是原始代码中定义的名称。

【讨论】:

【参考方案2】:

SSDT 中不能正常使用 3-4 部分命名。您可以通过在代码中使用变量来解决此问题。所以假设你有[localhost].[reports].[dbo].[your_table],你需要使用[$(ReportServer)].[$(ReportDatabase)].[dbo].[your_table]

【讨论】:

以上是关于无法使用视图定义中具有表的完全限定名称的视图编译 SSDT 数据库项目的主要内容,如果未能解决你的问题,请参考以下文章

何时在查询中使用 dbo 限定表或视图名称?

无法提取图纸的模型视图属性

jOOQ 内置方法生成具有完全限定的“列”名称的不确定查询

简述什么是视图

第五章 SQL定义表(一)

mysql 视图