2011-11-20 35 views
1

我使用參數化查詢來搜索從搜索框中拾取的特定單詞,但某些單詞正在創建問題。其中之一是「墊」一詞。SQL Server不返回參數化查詢中特定單詞的結果

這是我使用的食譜數據庫,裏面有一個叫做「泰式泰式」的食譜;如果我將單詞「泰語」傳遞給查詢參數,那麼該食譜將返回正常。如果我將「pad」一詞傳入,查詢將運行約10秒鐘,並且不返回任何記錄。

我懷疑「pad」是一個保留關鍵字,所以我一直在嘗試其他關鍵字;到目前爲止,我發現的唯一導致同樣問題的是「proc」。

任何想法是什麼問題,更重要的是,我怎麼能解決它。

+0

墊不是我知道的關鍵字。您最好將實際使用的代碼(以及一些示例數據)發佈給我們看看。 –

+0

參數化查詢的一個主要目的是清楚地將這些值與語言分開。它應該完全不受使用保留字的影響。 – phatfingers

+0

你的'where'條款是什麼?你使用「喜歡」,自由文本還是其他方法?請張貼一些代碼... –

回答

0

因爲你沒有提供關於代碼如何工作的詳細信息,所以我會做一些瘋狂的猜測,'參數化查詢'是指一個存儲過程,並且通過它的整個文本調用存儲過程(不是最佳做法,但我不知道你使用的軟件有什麼限制)。

無論如何,原因padproc可能會導致問題是因爲您沒有明確告訴服務器這些是字符串。由於我從未真正理解的原因,TSQL將允許您將單字符串傳遞給(n)個varchar參數的過程。一個簡單的例子是:

EXEC sp_helpdb master 

嚴格來說,這應該會給語法錯誤。正確的語法是:

EXEC sp_helpdb 'master' 

但似乎與開發者去「嘿,這是少打字,這是偉大的生產力!」所以查詢起作用。

現在,如果你的程序被稱爲像這樣:

EXEC p_find_recipe thai 

這將通過字符串「泰」,一切都會按預期運行。但是,當使用保留字如procfiletable等...會導致語法錯誤,並且您需要確保將引號放在值的周圍才能正常工作。

所有這一切說: - 語法錯誤應立即返回,它不應該需要10秒 - AFAIK「墊」不是reseverd關鍵字

所以我不知道超適用於你的問題,所以它很有可能我只花了10分鐘打字沒什麼=)

無論如何,你可能需要提供一些額外的輸入你正在使用什麼語言,你的意思是參數化查詢(也許你意思是後面填寫?的SELECT * FROM table WHERE field = ?語法?),最好是用一些示例代碼。