我正在撞墙,因为我在VS2012遇到了一个奇怪的错误。
我有一个数据库项目,其中包括一些同义词。它们基本上是对另一个数据库的表引用,以避免动态SQL生成。我已经为同义词添加了必需的参考数据库。一切都很有效,除了一些使用其中一些同义词的观点!由于我在我的存储过程中使用相同的同义词并且它们没有导致任何构建失败,我不确定为什么视图导致问题。
错误消息显示:“SQL05313:同义词'xxx'指的是无效对象。”
这是一个示例代码 -
dbo.MyTable.sql ...
CREATE SYNONYM [dbo].[MyTable] FOR [$(FOO_DB)].[dbo].[MyTable];
dbo.MyProc
CREATE [dbo].[MyProc] AS SELECT col1, col2, col3 FROM [dbo].[MyTable];
SUCCESS: this works
dbo.MyView.sql ...
CREATE VIEW [dbo].[MyView] AS SELECT col1, col2, col3 FROM [dbo].[MyTable];
ERROR: SQL05313 Synonym '[dbo].[MyTable]' refers to an invalid object.
还有其他人遇到过这个问题吗?如果是,我感谢您的帮助:)
答案 0 :(得分:0)
由于某种原因,SP中的引用错误被视为警告,而视图中的引用错误被视为错误。因此,错误只意味着对$(FOO_DB)的引用不起作用 - 仔细检查变量引用是否设置正确。
如果要引用另一个DB项目,则必须单独编译.dacpac(例如,您无法创建循环引用)。如果你真的需要循环引用(FOO_DB1中的视图引用FOO_DB2,并且FOO_DB2中的视图引用FOO_DB1),请查看复合对象(类型相同数据库的数据库引用)。
答案 1 :(得分:0)
我收到了这个错误,最终我发现我已经运行了CREATE SYNONYM fred FOR ...
而不是CREATE SYNONYM **dbo**.fred FOR ...
因此,它在我的个人架构中创建了同义词,而不是dbo
,这阻止了CREATE VIEW
。
我知道您的代码包含[dbo].[MyTable]
,但您在自己的架构中是否有相同的同义词,而且之前的CREATE SYNONYM
命令不包含[dbo]
,这可能会让{ {1}}命令?