if exists(select * from sysobjects where type='FN' and name='getSplitNum')
drop function getSplitNum
go
create function getSplitNum(@content text,@split varchar(10))
returns int
as
begin
    declare @index int;set @index=1;
    declare @num int;set @num=0;
    declare @start int;set @start=0;
    while @index>0
    begin        
        set @index=charindex(@split,@content,@start);
        set @start=@index+1;
        set @num=@num+1;
    end
    return @num;
end
godbo.getSplitNum(@c_url,'|||')
存储过程里,如上代码,计算某字符串里,有多少个由|||分开的字符串. 运行结果最大值只有87,请教老师,问题在哪?************************************************
运行环境:sql 2000===================================
问题基本查到.但不知道怎么解决.由于@c_url过长(长度达到13000字符以上),导致出现比实际值小很多.应该是charindex在处理的时候,把@content转为了varchar(8000)。请教各位老师,此方法可否改进,或者用其他方法计算?________________________________________________________
@c_url='http://pic3.bengou.com/comicdata/hy/hyrz008081909/1219109066935/1219109122105.jpg|||http://pic3.bengou.com/comicdata/hy/hyrz008081909/1219109066935/1219109122181.jpg|||http://pic3.bengou.com/comicdata/hy/hyrz008081909/1219109066935/1219109122194.jpg|||http://pic3.bengou.com/comicdata/hy/hyrz008081909/1219109066935/1219109122215.jpg|||http://pic3.bengou.com/comicdata/hy/hyrz008081909/1219109066935/1219109122229.jpg……'

解决方案 »

  1.   

    [code=SQL]DECLARE @S1 VARCHAR(8000),@S2 VARCHAR(8000),@S3 VARCHAR(8000)
    SELECT @S1=REPLICATE('A',7999)
    SELECT @S2=REPLICATE('A',7999)+'1'
    SELECT @S3='1'+REPLICATE('A',7999)
    SELECT CHARINDEX('1',@S1+@S2)
    SELECT CHARINDEX('1',@S1+@S3)
    经过测试。CHARINDEX 不支持TEXT 类型,只支持字符类型,所以转换成只有8000的/*函数 语句 
    DATALENGTH  READTEXT 
    PATINDEX SET TEXTSIZE 
    SUBSTRING UPDATETEXT 
    TEXTPTR WRITETEXT 
    TEXTVALID 你可以改变方式用UPDATETEXT ,PATINDEX 来实现
    要不然升级2K5以上。[/code]
      

  2.   

    微软很久以前就停止了对SQL SERVER 2000的技术支持,建议升级到2005或是2008.2005开始有了varchar(max)和nvarchar(max) 很方便的。