【问题标题】:SQL03006 error in VS2010 Database Project (SQL Server 2008)VS2010 数据库项目(SQL Server 2008)中的 SQL03006 错误
【发布时间】:2011-05-30 06:37:14
【问题描述】:

当我尝试在 VS2010 中为 SQL Server 2008 设置数据库项目时,我一直遇到错误“SQL03006 - xyz 列包含对对象的未解析引用。对象不存在或引用不明确,因为它可能引用以下任何对象..."

原始代码的一个示例如下:

CREATE VIEW [dbo].[vwSomeView]
AS
SELECT 
    CT.ID, 
    CT.UserName, 
    ST.Title
FROM
    SomeOtherDatabase.dbo.ComputerTable CT
JOIN
    SomeOtherDatabase.dbo.SoftwareTable ST ON
    CT.ID = ST.ComputerID

现在错误仅指例如列 CT.UserName,而不是 CT.ID。我还添加了对“SomeOtherDatabase”的相应数据库引用,并按照我在寻找解决方案时发现的几篇帖子的建议更新了代码:

CREATE VIEW [dbo].[vwSomeView]
AS
SELECT 
    CT.ID, 
    CT.UserName, 
    ST.Title
FROM
    [$(SomeOtherDatabaseName)].dbo.ComputerTable CT
JOIN
    [$(SomeOtherDatabaseName)].dbo.SoftwareTable ST ON
    CT.ID = ST.ComputerID

我不明白为什么 CT 表中的一列有问题,而另一列却没有。当我查看数据库项目中的表定义时,一切似乎都很好,因为列在那里(如预期的那样)。

我也不太确定我是否可以在定义后通过别名来引用表名,即我在编写“CT.ComputerID”而不是“[$(SomeOtherDatabaseName)].dbo 时遇到问题。 ComputerTable”(我不这么认为,但是我一直遇到很多错误,以至于我现在感觉有点迷茫)。

感谢任何正确方向的指针,谢谢。

更新

实际的错误信息是这样的:

SQL03006: View: [dbo].[vwSomeView] 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: [$(SomeOtherDatabaseName)].[dbo].[ComputerTable]::[ID] or [$(SomeOtherDatabaseName)].[dbo].[SoftwareTable]::[ID]"

G.

【问题讨论】:

  • 您能发布与您发布的代码匹配的实际消息吗?为什么在您提供代码后清理错误:或者您也给我们清理过的代码......?
  • 这是一个比原始代码更简洁的修改版本,尽管希望仍能显示我遇到的一般问题。如果需要的话,我想我可以用合适的代码设置一个完整的例子来创建数据库和表,但这可能需要更多的代码。

标签: sql database visual-studio-2010 project


【解决方案1】:

JOIN 是SoftwareTable .ComputerIDComputerTable.ID,这对我来说意味着ComputerTable(CT 别名)中没有ComputerID

真的除了ComputerTable.ID 之外还有ComputerTable.ComputerID 列吗? SoftwareTable 上的外键的唯一键是哪个?

[$(SomeOtherDatabaseName)] 位是我认为的红鲱鱼

编辑:

您的错误是由 SQL Server 查找数据库名称 [$(SomeOtherDatabaseName)] 引起的

由于某种原因,它没有被 VS 纠正。

【讨论】:

  • 抱歉,这是一个错误。表关系就像“通常”,CT.ID = ST.ComputerID。虽然我遇到过几次 [$(SomeOtherDatabaseName)] 语法,但我想我一引用另一个数据库项目就需要它。
  • ..请问现在是实际错误吗?您仍然在问题中提到 CT.ComputerID ......
  • 已更新,希望对您有所帮助。如果没有,我会尝试创建一些示例代码,请告诉我。
  • 谢谢,但根据blogs.msdn.com/b/bahill/archive/2009/08/26/…,这意味着一旦不同数据库之间存在链接,我就无法将VS2010用于数据库项目。如果我不使用 [$(DatabaseName)] 语法,VS2010 无法处理它,但如果我这样做也不起作用。
  • 文章说“我们的指导是不要使用本地 3 部分名称,因为它引入了不必要的抽象层和对数据库名称的依赖。”太对了。事实是 VS 并没有在部署时替换名称。您可以使用 WITH SCHEMABINDING 提前捕获此错误:如果无法解析引用,SQL Server 将不允许创建视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多