2011-10-25 58 views
0

我們有可能看起來像數據:途徑搜索單個字符後跟一個連字符用跟隨多個文本SQL Server全文搜索

A-10001 
A-10002 
A-10003 
B-10001 
B-10002 
B-10003 

;當我們想找到所有的包含「A-100」的比賽。使用全文搜索,我們正在做的事情,如:

where contains(e.*, '"A-100*"') 

然而,由於「 - 」被認爲是一個字打破邊界,並且因爲A是一個干擾詞(因爲它是一個單個字符),查詢不返回任何結果。我想知道是否有任何(簡單)的方式來返回預期的結果。

注意,我明白,在這個簡化的情況下,我可以使用像,而不是包含,是這樣的:

where 
    (e.myColumn1 like '%A-100%' 
    or e.myColumn2 like '%A-100%' 
    or e.myColumn3 like '%A-100%', 
    etc) 

但對於我的情況是行不通的(主要是性能方面的原因,並因爲有很多列,我需要看看)。

我也明白,我就能把搜索字符串轉換成兩個詞,並做一些事情,如:

where 
    contains(e.*, '"100*"') 
    and (e.myColumn1 like '%A-100%' 
     or e.myColumn2 like '%A-100%' 
     or e.myColumn3 like '%A-100%', 
     etc) 

但同樣,因爲有很多列,這不是一個理想的解決方案。

我感興趣的SQL Server 2005及更高版本的解決方案,但如果有一個SQL Server 2008中具體的解決方案,我很想在這一點。

感謝您的幫助, 埃裏克

回答

1

我不認爲你會發現這個一個非常乾淨的解決方案。我可能會過分簡化問題,但我的建議是前兩個字符的派生(計算)列。如果您的優先級是讀取性能,請在計算列上放置非聚簇,幷包含完整列。這將使尋找'A-',而像總是需要掃描。即使你有幾列要評估,這應該仍然比每列的類似謂詞更好。