select * from table where contains(columnname,'"text1" or "text2" or "text3"')
見鏈接供你考慮。
我知道你的高級職員希望避免動態SQL,但我堅信動態SQL不是邪惡的。
在下面的例子中,可以看到,與幾個參數(或甚至默認值),和代碼3行,可以:
1) Dynamically search any source
2) Return desired or all elements
3) Rank the Hit rate
的SQL
Declare @SearchFor varchar(max) ='Daily,Production,default' -- any comma delim string
Declare @SearchFrom varchar(150) ='OD' -- table or even a join statment
Declare @SearchExpr varchar(150) ='[OD-Title]+[OD-Class]' -- Any field or even expression
Declare @ReturnCols varchar(150) ='[OD-Nr],[OD-Title]' -- Any field(s) even with alias
Set @SearchFor = 'Sign(CharIndex('''+Replace(Replace(Replace(@SearchFor,' , ',','),', ',''),',',''','[email protected]+'))+Sign(CharIndex(''')+''','[email protected]+'))'
Declare @SQL varchar(Max) = 'Select * from (Select Distinct'[email protected]+',Hits='[email protected]+' From '[email protected] + ') A Where Hits>0 Order by Hits Desc'
Exec(@SQL)
返回
OD-Nr OD-Title Hits
3 Daily Production Summary 2
6 Default Settings 1
我應該補充一點,我的搜索字符串是逗號分隔的,但您可以更改爲空格。
另一個注意事項CharIndex在LIKE上可能實質上更快。看一眼 http://cc.davelozinski.com/sql/like-vs-substring-vs-leftright-vs-charindex
'動態SQL,我試圖避免' - >爲什麼? –
您可能會閱讀這篇關於搜索類型查詢的文章。 http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/ –
@AaronBertrand - 我們的前輩希望我們儘可能避免。 – SlowCoder74