未解析的对象引用

时间:2014-08-07 11:19:38

标签: sql-server tsql

我有一个巨大的视图,选择了一堆表和列。

我需要加入另一个位于同一服务器上的数据库,但是SQL Server正在向我发出一条消息,指出对数据库对象的引用尚未解析。

myView contains an unresolved reference to object db2.dbo.table

USE db1
CREATE VIEW dbo.myView as
    SELECT * FROM dbo.table as main

    INNER JOIN db2.dbo.table as otherTable
    ON (
        db1NotMain.value = otherTable.value

        -- same happens when I do the following
        dbo.table2 = otherTable.value

    )
    INNER JOIN dbo.table2 as db1NotMain
    ON (
        db1NotMain.value = someOtherTableElsewhereInDb1.value
    )

我真的很难过,因为它没有任何意义。

错误发生在otherTable内连接上,只有当我添加它时才会发生错误。

3 个答案:

答案 0 :(得分:0)

加入顺序在这里很重要。您在查询中引入db1NotMain之前尝试使用SELECT * FROM dbo.table AS main INNER JOIN dbo.table2 AS db1NotMain ON -- get stuff (please include the rest of your ON clause) INNER JOIN db2.dbo.table AS otherTable ON db1NotMain.value = otherTable.value 。切换连接的顺序:

{{1}}

答案 1 :(得分:0)

你不能直接在飞行中这样做。您有两种选择:

  1. 在DB环境中创建链接服务器,然后创建一个SP来处理它。

  2. 为它们获取两个DataSet,然后根据usersID将两个数据表合并为一个。

  3. 希望它能给你一些想法。

答案 2 :(得分:0)

在定义之前使用别名的注释是正确的。这是一个问题。 行dbo.table2 = otherTable.value没有意义,因为dbo.table2是一个表而不是列。那是另一个问题。

如果您在Visual Studio中工作,假设是SSDT,则主要错误是IDE错误。 SSDT试图编译'你的SQL代码使用tsql引擎。与任何VS项目一样,SSDT项目需要定义所有引用的数据库,以便它可以解析您的SQL代码。

您可能没有定义与db2的连接或引用。为此,您可以右键单击SSDT项目的“引用”节点,然后选择Add Database Reference。或者您可以导入db2的.dacpac来完成相同的操作。

如果您已从现有数据库导入项目,我相信可以选择抑制未解析引用的错误。

但是,我强烈建议您首先使用SSMS创建视图并使其正常工作,因为您有一些比VS SSDT错误更重要的语法错误。