我们有几个同义词用于引用单独数据库中的表(位于同一服务器上)。
实际的同义词很好,但引用所述同义词的存储过程/用户定义函数显示以下错误:
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
中 - 对我来说听起来有点过于讨厌。
答案 0 :(得分:8)
这是因为在调用者数据库中,您必须添加对依赖数据库的引用,并同时指定数据库名称的值。 看下面:
然后,您可以使用以下代码创建同义词:
CREATE SYNONYM [dbo].[mytable] FOR [$(MasterDatabase)].[dbo].[mytable]
答案 1 :(得分:0)
我对表同义词有同样的问题,它指向与主数据库在同一服务器上的另一个数据库。添加引用几乎可以用于除了内联表值函数之外的所有内容。一旦你尝试使用同义词
create synonym syn.Table for [$(MyDb)].[dbo].[Table];
在这样的函数中,错误又回来了。 SSDT 2013 Update 4是我的版本。令人难以置信的是,2016年这样的错误仍然存在于我们身上。处理同义词应该是无缝的,因为这是抽象依赖关系的主要机制。不敢相信它仍然没有得到纠正。