2013-06-01 42 views
0

我正在使用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

是兩個數據庫在同一個SQL Server上?你在哪裏得到錯誤?當你預覽它?當你運行它?當你定義參數?你有沒有爲這個查詢成功定義參數? –

+0

在清理髮布查詢過程中,您最有可能意外刪除了編碼問題,因爲該查詢沒有任何問題,假設所有表和列都存在。 –

回答

0

此錯誤表示引用不能綁定到對象。但是,它並不是指表達式的列部分,而是指那之前的部分。

因此,如果P不是A中的列,那麼A.P將生成「列未找到」之類的錯誤。如果A是不是from子句中定義,那麼A.P會給你找不到錯誤」的`多部分標識符

的常見原因是濫用別名如果你有這樣的代碼:。

from TableA a 
where TableA.col . . . 

雖然TableA位於from子句中,但它在別名A而不是表名中是已知的,也可能發生這種情況,因爲您錯誤地鍵入了表名,模式名稱,數據庫名稱或服務器名稱

+0

感謝您的意見。在閱讀了關於這個問題的更多信息之後,我決定在腳本任務中構建整個sql,並通過命令或變量選項使用sql,而不是在SSIS中使用通過命令執行的sql並傳遞參數。我能夠將參數傳遞給腳本,並根據需要將其附加到我的查詢中。感謝您的所有建議。 –

+0

@IKONOSI。 。 。我對SSIS的SQL腳本有偏見。 –

相關問題