我有一個非常特殊的情況。我的ASP.NET頁面調用我們的存儲過程,對我們的數據庫執行全文搜索查詢。一些常見的搜索字符串包括一個&符號,因爲我們的幾個品牌的產品(知名品牌)也有一個&
的名字。使用CONTAINSTABLE轉義SQL Server全文搜索查詢中的&符號
事實證明,在一定的情況下,我沒有得到任何結果除非我逃脫符號(\&
),並在其他一些情況下,我沒有得到任何結果只有當我逃離符號。
我不知道這是否相關,但是(沒有給出品牌名稱)一端以&b
結尾,另一端以&c
結尾。
這些字符串(&b
或&c
)有可能具有自己的特殊含義嗎?而通過轉義他們我實際上是傳遞一個特殊的字符串到T-SQL?
EDIT
附加信息:經過進一步的測試中,我證明了誤差在存儲過程本身。用&
或\&
調用它會得到不同的結果。
我會嘗試發佈存儲過程的選定部分。我不會發表全部內容,因爲大部分內容並不真正相關。
vParamBuca
參數是導致故障的參數。值可以是'word&letter'
或word\&letter
。
SET @ricercaA = '''FORMSOF(INFLECTIONAL,"' +
REPLACE(LTRIM(RTRIM(@vParamBuca)),' ', '") AND FORMSOF(INFLECTIONAL,"') + '")'''
變量@ricercaA
然後用於創建查詢字符串:
[...]
FROM Products AS FT_TBL
LEFT OUTER JOIN CONTAINSTABLE (Products, Sign1, '+ @ricercaA + ') AS ColSign1_0 ON FT_TBL.ID = ColSign1_0.[KEY]
LEFT OUTER JOIN CONTAINSTABLE (Products, ManufacturerAdditionalText, '+ @ricercaA + ') AS ColManufacturerAdditionalText_0 ON FT_TBL.ID = ColManufacturerAdditionalText_0.[KEY]
LEFT OUTER JOIN CONTAINSTABLE (Products, ManufacturerForSearch, '+ @ricercaA + ') AS ColManufacturer_0 ON FT_TBL.ID = ColManufacturer_0.[KEY]
LEFT OUTER JOIN CONTAINSTABLE (Products, TuttaLaRiga, '+ @ricercaA + ') AS ColTuttaLaRiga_0 ON FT_TBL.ID = ColTuttaLaRiga_0.[KEY]
[...]
EDIT 2
非常感謝@srutzky指着我在正確的方向!與此同時,我還發現數據不一致,其中名稱中的&
其中一個品牌被修改爲不具有&
,而另一個品牌未被修改(底線,我目前的問題是由於:a部分修復是由某人在過去做出的)。
無論如何,回到正軌。現在我明白CONTAINSTABLE
函數中的&
字符被視爲邏輯AND(非按位)。
我仍然需要一個解決方案。 This answer給出了一個不適合我的解決方案(條件與我的不一樣)。我怎樣才能執行一個CONTAINSTABLE
搜索字符串與&符號?最好不必將&符號轉換爲另一個安全字符?
不確定它是否與您的問題有關,而且是T-SQL中的按位和運算符。 – Kevin
您能向我們展示您正在執行的查詢的示例以及表中列的類型嗎? – Dalorzo
請向我們展示您的存儲過程 – EricZ