全文索引是要走的路,但這將返回您的結果。
一個警告(我能想到)。如果您的搜索表達/模式包含列名,會產生假陽性
Declare @YourTable table (col1 varchar(50),col2 varchar(50),col3 varchar(50))
Insert Into @YourTable values
('hello xyz','abc is my last name','and I''m a developer'),
('hello xyz', null ,'and I''m a developer')
Declare @Search varchar(max) = 'xyz abc'
Select A.*
From @YourTable A
Cross Apply (Select FullString=(Select A.* FOR XML Raw)) B
Where FullString like '%'+replace(@Search,' ','%')+'%'
返回
col1 col2 col3
hello xyz abc is my last name and I'm a developer
編輯 - 多字/任何訂單查詢
試試這個沒有完全測試。我無法想象這是非常有效的尤其是較大的表格和衆多關鍵詞
Declare @YourTable table (col1 varchar(50),col2 varchar(50),col3 varchar(50))
Insert Into @YourTable values
('hello xyz','abc is my last name','and I''m a developer'),
('hello xyz', null ,'and I''m a developer')
Declare @Search varchar(max) = 'developer xyz'
Select *
From (
Select Distinct A.*
,Hits = sum(sign(charindex(C.Value,B.FullString))) over (partition by B.FullString)
,Req = C.Req
From @YourTable A
Cross Apply (Select FullString=(Select A.* FOR XML Raw)) B
Join (Select *,Req=sum(1) over() From String_Split(@Search,' ')) C on charindex(C.Value,B.FullString)>0
) A
Where Hits=Req
http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=c77123a71c810716b36d73a92ac714eb
這真是一個可怕的設計。你不應該有複合數據 - 這就是你正在談論的 - 存儲在一個參數中。將它們分成它們自己的參數。當一個存儲過程能夠使用多個參數時,爲什麼會讓自己很難? –
我認爲你應該考慮全文索引。這似乎有你正在尋找的功能。 –
@rory。ap在sql server 2016中的string_split函數會分割我的字符串空間,我在split_string上做了一個連接並試圖進行搜索。另一個問題是,我在5個表中留下了外部連接,這導致了性能問題。 – ISHIDA