2011-11-15 115 views
1

有沒有辦法根據字數來創建搜索動態搜索?創建使用T-SQL存儲過程

例如,如果我搜索carwheel它會創建T-SQL搜索類似

select * from table 
where 
    (word is like @word1) 
    and (word is like @word2) 

其中@ WORD1爲car和@ WORD2是wheel

它可以是任何數量的單詞,因此這應該是動態的。

謝謝。

回答

1

試試這個,@wordtable可以動態包含所有你想要的話。它只會從@table中找到所有單詞存在的行:

declare @wordtable table(word varchar(20)) 
declare @table table(word varchar(500)) 

insert @wordtable values('car') 
insert @wordtable values('wheel') 

insert @table values('carwheel') 
insert @table values('car') 
insert @table values('wheel') 
insert @table values('wheelcat') 

select * from @table t 
where not exists (select 1 from @wordtable where t.word not like '%' + word + '%') 

「Contains」會精確地還是更好。但這是解決問題的一種體面的方式。

0

這將是非常緩慢,不可擴展。 你爲什麼不考慮使用類似Lucene的東西。

1

假設它確實是你要搜索的詞,SQL Server內置全文搜索(http://msdn.microsoft.com/en-us/library/ms142571.aspx) - 它一直存在至少8年。它並不完美 - 你可以做一個案例Lucene的是更好 - 但如果你的需求很簡單,它肯定不會工作。

這也意味着你可以只使用過的文本搜索,如「模糊」匹配的架子功能。

正如你不會有儘可能多的代碼來寫,你會避免在你的僞代碼的bug -

(word is like @word1) 
    and (word is like @word2) 

只會產生一個結果,如果字詞1和字詞2是相同的......

0

我會把考慮什麼上面已經說了,但是如果你仍想爲此編寫SQL,你可以嘗試CHARINDEX函數

 
declare @searchTerms varchar(100) 
select @searchTerms = 'WORD1,WORD2,GIRLS,BOYS' -- some list 

select Field1, Field2 , Field3 , Field4 
from SomeTable 
where CHARINDEX(',' + Field1 + ',', ',' + @searchTerms + ',' , 0) > 0 

所以你searchTerms,表和F ield可以通過變量,如果你想更換,那麼你建立一個SQL語句,你再執行