我有一个巨大的视图,选择了一堆表和列。
我需要加入另一个位于同一服务器上的数据库,但是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
内连接上,只有当我添加它时才会发生错误。
答案 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)
你不能直接在飞行中这样做。您有两种选择:
在DB环境中创建链接服务器,然后创建一个SP来处理它。
为它们获取两个DataSet,然后根据usersID将两个数据表合并为一个。
希望它能给你一些想法。
答案 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错误更重要的语法错误。