Visual Studio 2010数据库项目 - 未解析的同义词参考

时间:2011-10-04 03:07:06

标签: visual-studio-2010 database-project

我们有几个同义词用于引用单独数据库中的表(位于同一服务器上)。

实际的同义词很好,但引用所述同义词的存储过程/用户定义函数显示以下错误:

Error   13  SQL03006: Column: [dbo].[GetCocosIndexSearched].[User ID] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: [dbo].[AuditType].[e]::[LOGIN_ID], [dbo].[EMPLOYEES].[e]::[LOGIN_ID], [dbo].[EMPLOYEES].[LOGIN_ID] or [dbo].[SearchCIBirthsRequest].[e]::[LOGIN_ID].    C:\VSTS\Corporate\WARS Audit\MAIN\Source\RBDM.Audit.Database\Schema Objects\Schemas\dbo\Programmability\Functions\GetCocosIndexSearched_1.function.sql  21  5   RBDM.Audit.Database

[dbo].[GetCocosIndexSearched]是一个函数,[dbo].[EMPLOYEES]是同义词。

这些在实际数据库本身中都可以正常工作 - 问题仅在于数据库项目。我已经尝试添加对单独数据库的引用(通过新的数据库项目或数据库项目模式),但随后会出现与同义词和引用表的冲突问题:

Error   7   SQL04105: The model already has an element that has the same name dbo.EMPLOYEES.    C:\VSTS\Corporate\WARS Audit\MAIN\Source\RBDM.Audit.Database\Schema Objects\Schemas\dbo\Synonyms\EMPLOYEES.synonym.sql  2   1   RBDM.Audit.Database

有什么想法吗?在另一个stackoverflow帖子中提到了一个解决方法,该文章讨论了如何将创建脚本放在Script.PostDeployment.sql中 - 对我来说听起来有点过于讨厌。

2 个答案:

答案 0 :(得分:8)

这是因为在调用者数据库中,您必须添加对依赖数据库的引用,并同时指定数据库名称的值。 看下面:

Database reference

然后,您可以使用以下代码创建同义词:

CREATE SYNONYM [dbo].[mytable] FOR [$(MasterDatabase)].[dbo].[mytable]

答案 1 :(得分:0)

我对表同义词有同样的问题,它指向与主数据库在同一服务器上的另一个数据库。添加引用几乎可以用于除了内联表值函数之外的所有内容。一旦你尝试使用同义词

create synonym syn.Table for [$(MyDb)].[dbo].[Table];

在这样的函数中,错误又回来了。 SSDT 2013 Update 4是我的版本。令人难以置信的是,2016年这样的错误仍然存​​在于我们身上。处理同义词应该是无缝的,因为这是抽象依赖关系的主要机制。不敢相信它仍然没有得到纠正。