我正在使用SQL Server 2008并尝试在SSIS包数据流任务中编写查询,以根据另一个数据库的结果集从一个数据库中读取数据。
我有多个表A,B,C,D,E等,我正在尝试编写一个连接这些表并在过滤器后获取数据的选择。我得到一个"多部分标识符无法绑定"以下查询错误
SELECT
A.1 as A1,
A.2 as A2,
A.3 as A3,
B.1 as B1,
(Select C.1 from C
left join cc on c.2 = cc.2
where C.x = A.x) as C1,
(Select D.1 from D where D.x = A.x) as D1,
E.4 as E4
FROM A
left join B on B.Y = A.Y
inner join C on C.Y = A.Y
inner join D on D.Y = C.X
left join E on E.Y = D.Z AND E.Z = 'ZZZZ'
WHERE A.P = ?
查询的一般结构如上所述,如果我完全删除where子句或给出一个简单的"WHERE A.P = 'PPPP'"
,查询运行正常。它看起来很简单,我没有使用where子句中的子查询中的任何数据。我究竟做错了什么?
答案 0 :(得分:0)
此错误表示引用无法绑定到对象。但是,它不是指表达式的列部分,而是指之前的部分。
因此,如果P
不是A
中的列,那么A.P
将生成类似“未找到列”的错误。如果A
子句中未定义from
,则A.P
将为您提供“多部分标识符未找到错误”。
一个常见的原因是滥用别名。如果你有这样的代码:
from TableA a
where TableA.col . . .
然后你会得到错误。虽然TableA
子句中包含from
,但查询中的别名A
而不是表名称。这也可能发生,因为您在表达式中输入了表名,模式名,数据库名或服务器名。