日期:2014-05-18  浏览次数:20487 次

关于TEXT类型的查询问题
在存储过程中,我要对text类型的字段进行循环查找(重点是要循环查),找出符合查询条件的字符后的50位字符(每条记录中可能包含多个要查询的字符).首先使用TEXTPTR做了引用,但是不知道用什么来对varbinary来做查找定位,也就没有办法用READTEXT来进行读取了,请教大虾们,有没有解决办法.(有的数据大于8060)
例如:
一条记录中TEXT字段存储数据为:
(欢迎 'B '欢迎欢迎欢迎欢迎欢迎 'B '欢迎欢迎欢迎欢迎 'B '欢迎欢迎欢迎)
使用存储过程查出每个 'B '后面的三个字符,组成一个串返回.


------解决方案--------------------
无需用到指针,这是以前写的一个返回结果集的函数(查询http返回后100个字符的结果集)
CREATE function search(@location int)
returns @re table(s varchar(200))
begin
declare @newloc int
select @newloc=charindex( 'http ',Text字段,@location) from 表
if @newloc> 0
begin
set @newloc=@newloc+1
insert into @re
select substring(convert(ntext,Text字段),@newloc-1,50) from 表
union all
select * from dbo.search(@newloc)
end
return
end
如果只返回字符串更简单一点,稍作修改就可以,但是要注意返回串不要大于8000
CREATE function search(@s varchar(10))
returns @re varchar(8000)
begin
declare @newloc int
select @newloc=1,@re= ' '
while @newloc> 0
begin
select @newloc=charindex(@s,Text字段,@newloc) from 表
if @newloc> 0
select @re=@re+substring(convert(ntext,Text字段),@newloc+len(@s),3) from 表
else
set @newloc=@newloc+1
end
return
end
使用的时候直接search( 'B ')就好了