【问题标题】:Creating View Using Synonyms in a Database Project (Visual Studio 2012)在数据库项目中使用同义词创建视图 (Visual Studio 2012)
【发布时间】:2023-03-22 15:10:01
【问题描述】:


我在 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.


有没有其他人遇到过这个问题?如果是,我感谢您的帮助:)

【问题讨论】:

  • 您究竟是什么时候收到此错误的?您是否尝试过在 SSMS 中执行脚本?
  • 我正在使用 vs 2015 我面临的相同问题。请任何人得到这个分享的答案。
  • 你找到解决办法了吗?

标签: sql visual-studio-2012 database-project


【解决方案1】:

由于某种原因,SP 中的引用错误被视为警告,而视图中的相同错误则被视为错误。因此,错误只是意味着对 $(FOO_DB) 的引用不起作用 - 仔细检查变量引用是否设置正确。

如果您要引用另一个数据库项目,它必须可以单独编译为 .dacpac(例如,您不能创建循环引用)。如果确实需要循环引用(FOO_DB1 中的视图引用 FOO_DB2,FOO_DB2 中的视图引用 FOO_DB1),请查看复合对象(同一数据库类型的数据库引用)。

【讨论】:

  • 您好,我尝试了您的建议。但我仍然没有看到我的同义词。场景:主项目,外部对象项目。在主项目中,我有一个从同义词中进行选择的视图。当我构建项目时,据说在数据库中找不到同义词。同义词更改为: CREATE SYNONYM [dbo].[TestSynonym] FOR [$(ExternalServer)].[$(ExternalDB)].[dbo].[Table1] 我在 ExternalObjects 项目中创建了 Table1。我还在主项目中向 ExternalObjects 添加了一个数据库引用。我错过了什么?谢谢,亚历克斯
【解决方案2】:

我得到了这个错误,我最终发现我运行的是CREATE SYNONYM fred FOR ...而不是CREATE SYNONYM **dbo**.fred FOR ... 因此,它在我的个人模式中创建了同义词,而不是 dbo,这停止了 CREATE VIEW。 我知道您的代码包含[dbo].[MyTable],但是您自己的架构中是否有与之前不包含[dbo]CREATE SYNONYM 命令相同的同义词,这可能会混淆CREATE VIEW 命令?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多