2016-09-30 81 views
1

我有一個關鍵字什麼是檢查如果列包含任何關鍵字

關鍵詞表的最佳方式:

KeyID | Keyword 
1  Small 
2  Medium 
3  Large 
4  XXLarge 

然後,我有另一個表「日誌」有超過10萬條記錄。

日誌:

LogId | Description 
1  blah blah.. Medium blah 
2  dsdms Large whatever 

我想補充另一列keyid的記錄表格中,然後再通過每個說明找到,如果它包含的關鍵字,然後設置keyid的從關鍵詞表修正的KeyID爲該行條目。

實現此目的的最快方法是什麼?

+1

最快的方法是使用SQL Server的全文搜索功能來生成FTS索引。其他任何代碼都會很慢並且執行速度很慢 –

+0

「最快」的含義是什麼?你的意思是你必須這樣做*一次*,並且想要快速和骯髒地完成這個過程而不要設置太多?或者你是否想要建立一個堅固的過程,可以一次又一次地實現新的傳入數據和穩步增長的表格? – Ralph

+0

只是好奇,你如何做一個類似的描述:「等等等等等等等等等等等等等等等等等等。 – JFM

回答

0

我嘗試了以下方法。請檢查:

create table one(
keyid int, 
keyword varchar(10) 
) 


insert into one values (1,'Small') 
insert into one values (2,'Medium') 
insert into one values (3,'Large') 
insert into one values (4,'XXLarge') 

create table two(
logid int, 
description varchar(100)) 

insert into two values ('1','blah blah.. Medium blah') 
insert into two values ('2','dsdms Large whatever') 


alter table two add keyid int 

這是查詢按照您的要求

declare @query varchar(800),@keyid int,@keyword varchar(100),@description varchar(max),@LOGID INT 

declare d cursor for 
select keyid,keyword from one 
open d 
fetch next from d into @keyid,@keyword 
while @@FETCH_STATUS=0 
begin 

declare c cursor for 
select DESCRIPTION,LOGID from two 
open c 
fetch next from c into @description, @logid 
while @@FETCH_STATUS=0 
BEGIN 

set @query='if exists(select * from two where upper(description) like ''%' +upper(@keyword)+'%'' and logid='+cast(@LOGID as varchar(max))+') 
begin 
update two set keyid=(select keyid from one where upper(keyword)=''' +upper(@keyword)+''') where logid='+cast(@LOGID as varchar(max))+' 
end' 
print @query 
exec (@query) 

fetch next from c into @description, @logid 
end 
close c 
deallocate c 

fetch next from d into @keyid,@keyword 
end 
close d 
deallocate d 

select * from two 
0

使用樣本數據@RanjanaGhimire爲我們提供了(非常感謝你爲)下面的查詢可能就足夠了:

update t 
set keyid = o.keyid 
from dbo.one as o 
    cross join dbo.two as t 
where charindex(o.keyword, t.description) > 0; 
相關問題