有沒有辦法根據字數來創建搜索動態搜索?創建使用T-SQL存儲過程
例如,如果我搜索car
和wheel
它會創建T-SQL搜索類似
select * from table
where
(word is like @word1)
and (word is like @word2)
其中@ WORD1爲car
和@ WORD2是wheel
。
它可以是任何數量的單詞,因此這應該是動態的。
謝謝。
有沒有辦法根據字數來創建搜索動態搜索?創建使用T-SQL存儲過程
例如,如果我搜索car
和wheel
它會創建T-SQL搜索類似
select * from table
where
(word is like @word1)
and (word is like @word2)
其中@ WORD1爲car
和@ WORD2是wheel
。
它可以是任何數量的單詞,因此這應該是動態的。
謝謝。
試試這個,@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」會精確地還是更好。但這是解決問題的一種體面的方式。
這將是非常緩慢,不可擴展。 你爲什麼不考慮使用類似Lucene的東西。
假設它確實是你要搜索的詞,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是相同的......
我會把考慮什麼上面已經說了,但是如果你仍想爲此編寫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語句,你再執行