我運行這是給我的關於「多部分標識符」錯誤動態SQL。由於我在不同的表中使用了相同名稱的列,所以我在列名前加上一個表別名,這似乎是問題所在。T-SQL錯誤:「多部分標識符X.Y無法綁定」
報告的錯誤是:
The multi-part identifier
e.Categorydescription
could not be bound.
The multi-part identifierl.FullAddress
could not be bound.
Categorydescription
存在於表Events
和Categories
,和列FullAddress
在表Events
和Location
存在,因此我使用e.Categorydescription
和l.FullAddress
列。我不能刪除內部連接,因爲我需要表Location
和Categories
中的其他列。
我錯估了錯誤。實際的錯誤是進一步下跌(下圖)在我從##讀碼結果全局表:
SET @s_query = 'SELECT ' + @ColNames + ' FROM ##Results
WHERE ##RowNum BETWEEN('+CONVERT(varchar(20),@PageIndex)+'-1) * '+
CONVERT(varchar(20),@PageSize)+' + 1
AND((('+CONVERT(varchar(20),@PageIndex)+' -1) * '+
CONVERT(varchar(20),@PageSize)+' + 1) + '+CONVERT(varchar(20),@PageSize)+') - 1
ORDER BY ##RowNum';
EXEC (@s_query); -- the error is from here
--because #Results# has "Categorydescription" instead of "e.Categorydescription"
shoule e.CategoryDescription是c.CategoryDescription。如果你添加了表格結構,這將有所幫助。 – 2014-08-29 09:20:15
@ user2906420:我簡化了您的問題,使其更容易和更快速閱讀。你已經用你的'PRINT'輸出顯示了什麼實際的SQL查詢被執行了,所以我刪除了不相關的位(從幾個變量構建SQL查詢的地方)並且替換了實際的SQL。 (如果你不同意它,請隨意回滾我的編輯。) – stakx 2014-08-29 09:29:54
我對你的'SELECT'列'## RowNum'很好奇。我明白[表格名稱(全局臨時表格)]中的##是什麼意思(http://stackoverflow.com/a/3166130/240733),但列名稱...?這是一個有效的列名,或者你需要**(a)**刪除'##';或者**(b)**通過將其放在尖括號中來轉義列名:'[## RowNum]'? – stakx 2014-08-29 09:35:43