/*--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搜尋關鍵字
選擇自 zjcxc 的 blog ntext搜尋 按 tb 表中的 keyword 在 ta 中查詢 content 列出每個 keyword 在 content 中的具體位置 鄒建 2004.07 測試資料 create table ta id int identity 1,1 content n...
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...