首页 > 解决方案 > Visual Studio 中的 DB 项目中的 DB 视图在同一项目中看不到同义词

问题描述

我们的网络应用程序使用 4 个数据库,都在同一台服务器上。

这些数据库的 SQL 存储在我们解决方案中的 4 个项目中。

我在另一个数据库中使用的一个数据库中有一个视图。

这两个数据库都具有视图的同义词,具有相同的名称。从数据库的角度来看,这是完全合理的。

[database_1].dbo.Syn_AAAAAA 和 [database_2].dbo.Syn_AAAAAA 都指向 [database_3].dbo.vw_AAAAAA。

从 sql server 的角度来看,这是完全合理的。

应用程序工作正常。数据库很高兴。

Database1 在存储过程中使用了[synonym ==> view],一切都很好。当代码在 db 项目中时,也可以。

在 database2 PROJECT 中,我在另一个视图中引用了 [synonym ==> view]。当然,在数据库中工作正常。

但是在项目中,使用同义词的观点令人窒息。就好像它正在看到该名称的所有同义词,即使是那些超出其范围的同义词,也就是它所在的数据库。

select y.columnA, y.columnB, y.columnC, _l.columnD_, d3.columnE, d3.columnF
        from dbo.TableD d3
       inner join (subquery) y
          on y.columnA = d3.columnA
        left join _dbo.syn_AAAAAA_ l
          on _l.columnC_ = d3.columnC

(下划线表示来自 IntelliSense 的错误位置。)

如果我可以在服务器上编写合格的 SQL 代码,为什么我必须与 Visual Studio 争夺将其存储在项目中?

SQL71501:视图:[dbo].[vw_AAAAAA] 包含对对象的未解析引用。对象不存在或引用不明确,因为它可能引用以下任何对象:[$(ThisDB)].[dbo].[Syn_BBBBBB].[l]::[ColumnName], [$(ThisDB )].[dbo].[Syn_BBBBBB].[ColumnName] 或 [dbo].[Table].[l]::[ColumnName]。

SQL71561:视图:[dbo].[vw_AAAAAA] 对对象 [$(ThisDB)].[dbo].[Syn_BBBBBB] 有未解析的引用

标签: databasevisual-studioproject

解决方案


问题在于SYNONYM

为 [ DBName ].[dbo].[vw_xxxx]创建同义词 [dbo] .[syn_xxxx]

不得不将其更改为

为[$(DBNameVariable)] .[dbo].[vw_xxxx]创建同义词 [dbo] .[syn_xxxx]

大多数时候 [DBName] 工作,但在这种情况下,我不得不使用 [$(DBNameVariable)]。

右键单击您的数据库引用,查看您尝试引用的数据库,看看是否有一个变量。(我没有设置这个,所以这有点超出我的经验。)我的最后一个职位,我们没有在我们的代码解决方案中保留 SQL 项目。


推荐阅读