ntext搜尋關鍵字

2021-04-14 08:55:21 字數 2584 閱讀 6165

選擇自 zjcxc 的 blog

/*--ntext搜尋

按 tb 表中的 keyword 在 ta 中查詢 content

列出每個 keyword 在 content 中的具體位置

--鄒建 2004.07--*/

--測試資料

create table ta(id int identity(1,1),content ntext)

insert ta select '我是中國人我是中國人'

union all select '中國人民愛中國 中國人民愛中國 中國人民愛中國 中國人民愛中國'

create table tb(keyword nvarchar(100))

insert tb select '中'

union all select '中國'

go/****************==處理********************====*/

if exists (select * from dbo.sysobjects where id = object_id(n'[序數表]') and objectproperty(id, n'isusertable') = 1)

drop table [序數表]

go--為了效率,所以要乙個輔助表配合

select top 4000 id=identity(int,1,1) into 序數表

from syscolumns a,syscolumns b

alter table 序數表 add constraint pk_id_序數表 primary key(id)

go--建立處理的儲存過程

create proc p_search

ascreate table #t(id int,keyword nvarchar(100),position int)

declare @s nvarchar(4000),@keyword nvarchar(100)

declare @id int,@i int,@ilen int

declare tb cursor local for

select a.id,b.keyword,position=charindex(b.keyword,a.content)-1,ilen=4000-len(b.keyword)

from ta a,tb b

where charindex(b.keyword,a.content)>0

open tb

fetch tb into @id,@keyword,@i,@ilen

while @@fetch_status=0

begin

select @s=substring(content,@i+1,4000)

from ta where id=@id

while @s<>''

begin

insert #t(id,keyword,position)

select @id,@keyword,id+@i

from 序數表

where charindex(@keyword,@s,id)=id

select @i=@i+@ilen,@s=substring(content,@i+1,4000)

from ta where id=@id

endfetch tb into @id,@keyword,@i,@ilen

endclose tb

deallocate tb

select * from #t

go--呼叫示例

exec p_search

go--刪除測試

drop table 序數表,ta,tb

drop proc p_search

/*--測試結果

id          keyword   position 

----------- --------- ----------

1           中        3

1           中        8

1           中國      3

1           中國      8

2           中        1

2           中        6

2           中        9

2           中        14

2           中        17

2           中        22

2           中        25

2           中        30

2           中國      1

2           中國      6

2           中國      9

2           中國      14

2           中國      17

2           中國      22

2           中國      25

2           中國      30

(所影響的行數為 20 行)

--*/

ntext搜尋關鍵字

ntext搜尋 按 tb 表中的 keyword 在 ta 中查詢 content 列出每個 keyword 在 content 中的具體位置 鄒建 2004.07 引用請保留此資訊 測試資料 create table ta id int identity 1,1 content ntext ins...

ntext搜尋關鍵字

ntext搜尋 按 tb 表中的 keyword 在 ta 中查詢 content 列出每個 keyword 在 content 中的具體位置 鄒建 2004.07 引用請保留此資訊 測試資料 create table ta id int identity 1,1 content ntext ins...

ntext搜尋關鍵字

ntext搜尋 按 tb 表中的 keyword 在 ta 中查詢 content 列出每個 keyword 在 content 中的具體位置 鄒建 2004.07 引用請保留此資訊 測試資料 create table ta id int identity 1,1 content ntext ins...