我定义了一个ntext类型的变量,其中的值为'abc,def,ghi,jkl,mno,pqr'的类似形式,以逗号分隔,因为实际值可能很大,所以不能用nvarchar类型。现在我想按以","分割的方式分割这个变量的值,并分别取出其中的值,我用的是charindex查找","的位置,再用substring来取值的方式。但现在的问题是,循环取值到一定数量以后,charindex就找不到","的位置了,请问有什么办法解决??请注意,我这里是操作变量,而不是表的列。。

解决方案 »

  1.   

    charindex不支持text和ntext类型的,试试patindex
      

  2.   

    我也想过用patindex,但是用patindex的话,无法指定查找的起始位置啊.....
      

  3.   

    --把变量放到一个临时表中操作.declare @t table(a Ntext)
    insert into @t select N'abc,def,ghi,jkl,mno,pqr'
    SELECT PATINDEX('%,%', a) from @t
      

  4.   

    能否说得再清楚点
    对表列中的ntext内容,如何分割取值???
      

  5.   

    create procedure p_replacentext(@vTable varchar(50), @vField varchar(30),@vBefore varchar(8000),@vAfter varchar(8000))
    as
    begin
      Declare @Sql nvarchar(4000)
      declare @p_s varchar(800)
      Declare @p binary(16),@postion   int,@rplen   int   
      set @Sql=N'Select  @p=textptr('+@vField+'),@rplen=len('''+@vBefore+'''),@postion=patindex(''%'+@vBefore+'%'','+@vField+')-1 from '+@vTable   
      exec sp_executesql @Sql,N'@p binary(16) output,@rplen int output,@postion int output ',@p output,@rplen output,@postion output
      while @postion >= 0
      begin   
         exec master.dbo.xp_varbintohexstr @p, @p_s out
         set @Sql=N'updatetext '+@vTable+'.'+@vField+' '+@p_s+' '+cast(@postion as varchar(8))+' '+cast(@rplen as varchar(4))+' '''+@vAfter+''''
         exec(@Sql)
         set @Sql=N'select @postion=patindex(''%'+@vBefore+'%'','+@vField+')-1  from '+@vTable  
         exec sp_executesql @Sql,N'@postion int output ',@postion output
      end
    end  -------
    参考一下,你自己再修改一下就可以达到楼主的要求了
      

  6.   

    charindex是有限制的,详细请看联机帮助,patindex可以解决你的问题