2016-06-22 31 views
2

我使用SQL Server 2008和Latin1_General_CI_AS排序規則。表中列的空格數量未知

有人可以幫助我瞭解如何解決以下錯誤?

SELECT A.*  
FROM table1 AS A  
INNER JOIN table2 AS B ON LTRIM(RTRIM('A.PPNO')) = LTRIM(RTRIM('B.PNO')) 
WHERE A.OMPID = '1001' 

當我運行這段代碼,我得到這個錯誤:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ' '.

感謝

+1

你的問題沒有意義。第一個查詢沒有指示空格被刪除。第二個表達式,好吧,它不清楚它與第一個查詢有什麼關係。 –

+2

由於數據,此錯誤不是錯誤。這與語法有關。 A.PNO和B.PNO有空格作爲值並不重要,它應該仍然有效。你如何運行這個查詢。如果它是查詢分析器,你是否也錯誤地運行其他查詢? – Ash

+0

@GordonLinoff:對不起,我編輯了這個問題。請幫助 –

回答

0

試試這個:

SELECT A.* FROM table1 AS A 
INNER JOIN table2 AS B ON LTRIM(RTRIM(A.PPNO))= LTRIM(RTRIM(B.PNO))WHERE A.OMPID = '1001' 
+0

感謝它爲我工作。 –

+0

所以它意味着有一個空間,是否有可能刪除所有空間的特定列 –

+0

它沒有任何與列中的空間相關,它只是你在引號中使用的列名不是必需的。 –

0

錯誤顯示,有1號線的問題這看起來像你在使用SELECT *時可能對錶A中的字段有問題。

正確聲明你的領域,並確保你把它們放在不同的行上,像這樣;

SELECT 
A.Field1 
,A.Field2 
,A.Field3 
,A.Field4 
FROM table1 AS A 
INNER JOIN table2 AS B 
    ON LTRIM(RTRIM(A.PPNO)) = LTRIM(RTRIM(B.PNO)) 
WHERE A.OMPID = '1001' 

然後再次運行它。錯誤應該告訴你究竟哪個領域有問題。這可能是字段名稱有問題。這就是爲什麼我們不使用SELECT *

+0

*語法*錯誤永遠不會基於* data *來引發,因爲要訪問數據,代碼必須具有*編譯*,如果存在語法錯誤,則不會執行此操作。 –

+0

當然,除了已經提出的建議之外,OP的代碼沒有語法問題。我試圖確保可能導致問題的字段名稱沒有什麼奇怪之處。 –

+0

'。'附近的錯誤語法聽起來很像我的一個語法問題。 –