2013-08-22 42 views
-5

僅供參考我正在使用SQL Azure。在sql server中克服保留字「IN」

我注意到,當我試圖從基於車牌的表格中選擇數據以及該車牌的狀態時,如果狀態爲「IN」,我不會得到任何結果。我意識到在SQL服務器中保留單詞「IN」;不過,我在查詢中包含引號內的內容。我目前正處於測試階段,並且在表格中只有一個記錄,該記錄具有287YGB和狀態IN。

如果我按照以下方式編寫我的查詢,我什麼都沒有回來。

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles WHERE tblVehicles.Lisence = '287YGB' AND tblVehicles.PlateState = 'IN' 

如果我這樣寫我的查詢,我會回到我的結果。但這不夠好。

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles WHERE tblVehicles.Lisence = '287YGB' 

最後,如果我這樣寫我的查詢,我得到表中唯一的行。

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles 

從這些測試中我可以看到最後一個參數導致問題的地方。我假設這是由於「IN」一詞被保留的事實。有沒有解決的辦法?

+1

確定數據沒有一些前導空間或周圍的其他不可見字符?搜索「IN」沒有問題 –

+0

如果包含在引號中 - 您不應該遇到這個問題... – PinnyM

+3

'IN'是一個保留關鍵字。 ''IN''是一個字符串。如果你有值,它不是保留關鍵字。 –

回答

0

保留字通常只導致問題,在這種情況下,你需要用括號包起來(「[]」),以消除問題。我會保證你的PlateState裏面有一些垃圾,所以你需要先修剪它(LTRIM(RTRIM(PlateState))='IN')或者使用Like'%IN%'代替,然後這會返回你期望的結果。

+0

看來你是對的。我的狀態列nvarchar限制設置爲50.我不喜歡限制它低於OCD,因此我決定嘗試將它限制爲兩個字符。一旦我做到了,我原來的查詢工作。現在我想知道那裏有什麼垃圾,它在哪裏被引入。當我保存我的車輛並在我的程序中遵循PlateState變量時,我嚴格鍵入'IN'。該字符串始終爲「IN」。討厭這些小怪癖 – Adrian

+0

@FreshPrinceOfSO「我的狀態列nvarchar限制設置爲50.我不喜歡將它限制在低於OCD的範圍,因此我決定嘗試將它限制爲兩個字符。」 – Adrian

+0

@Adrian「即使你知道你的狀態首字母縮寫爲2個字符,你仍然堅持長達50個字符的可變長度?」 – Kermit

0

嘗試,如果你使用它們作爲字段名這

SELECT MakeModel, CitizenID, VehicleID FROM tblVehicles WHERE tblVehicles.Lisence = '287YGB' AND LTRIM(RTRIM(tblVehicles.PlateState)) = 'IN' 
相關問題