在SQL中参数值超过8000(TEXT类型)的处理方法,以"逗号"分隔的字符串

create   function dbo.sms_fn_split_text(@text text)
returns @returntable table(subcolstr varchar(200))
as   
begin
         --------------------------定义变量-----------------------------------------------------------------------------
         declare @fieldlen bigint,@nbegin bigint,@nsubstrlen bigint,@nflag bigint,@flag int
declare @sourcestring varchar(8000),@commastr varchar(8000),@splitstr varchar(8000),@splitlen int,@length int
         declare @branch_type varchar(10),@agent_branch_id varchar(50),@count bigint

         --------------------------赋初值-------------------------------------------------------------------------------
         select    @fieldlen =0,@nbegin=0,@nsubstrlen=0,@nflag = 0,@flag=0
         select @fieldlen = datalength(@text)
/*---------------------------------------------------------------------
         判断字段的段是否大于7000            
         如果大于7000则分多次放到varchar变量中进行分隔
----------------------------------------------------------------------*/        
         if @fieldlen >7000
         begin
                 while @nbegin+1<
                 begin
                 --------------------------------------------------------------------------------------------------
                         if @fieldlen-@nbegin>7000 
                         begin
                         --------------------------------------------------------------------------------
                                 set @nsubstrlen=7000
                                 set @flag = 1
                         --------------------------------------------------------------------------------
                         end
                         else
                         begin
                         --------------------------------------------------------------------------------
                                 set @nsubstrlen = @fieldlen - @nbegin    
                                 set @flag =0
                         --------------------------------------------------------------------------------
                         end
                         select   @sourcestring=substring(@text,@nbegin+1,@nsubstrlen) 
        
                         select   @splitstr = @sourcestring,
                                 @splitlen = charindex(',',@splitstr),
                                 @length    = datalength(@splitstr),
                                 @nflag = @splitlen
                                
                        
                         while @length>0
                         begin
                         ----------------------------------------------------------------------------------
                          if      @splitlen=0 
                                 begin
                                 --------------------------------------------------------------------------
                                         if @length = 7000
                                         begin
                                         ------------------------------------------------------------------
                                                 delete @returntable
                                                 insert @returntable (subcolstr)   values(null)
                                                 goto end_label
                                         ------------------------------------------------------------------
                                         end
                                         if @flag=0
                                             set @nbegin = @nbegin + @length
                                         break
                                 --------------------------------------------------------------------------
                                 end
                                         set @nbegin = @nbegin + @nflag

                                  set     @commastr 
                                         if @commastr <> ''
                                         insert @returntable (subcolstr) values(substring(@commastr,1,@splitlen-1))
                                  select @splitstr = substring(@commastr,@splitlen+1,@length),
                                                @length    = datalength(@splitstr),
                                                @splitlen = charindex(',',@splitstr)
                                         set     @nflag = @splitlen
                         -------------------------------------------------------------------------------------
                         end
                 --------------------------------------------------------------------------------------------------------------
                 end                 
                 set @splitlen=charindex(',',@splitstr)  
                 if      @splitlen=0 
                        set @splitlen=datalength(@splitstr)                

                 if @splitstr<>''
                  insert @returntable (subcolstr) values(substring(@splitstr,1,@splitlen))
         end
/*---------------------------------------------------------------------
         如果小于7000 
                 则再判断是否为NULL值        
                         如果为NULL则在数据库中取相应的数据
                         否则放入到VARCHAR中进行分隔
----------------------------------------------------------------------*/   
         else
         begin                  
                select   @sourcestring=substring(@text,1,@fieldlen) 
                 -----------------------------------------------------------------------------------------------------
                 select   @splitstr=@sourcestring,
                  @splitlen=charindex(',',@splitstr),
                  @length=datalength(@splitstr)

          while @length>0
          begin
          --------------------------------------------------------------------------------------
           if      @splitlen=0 
                         set @splitlen=@length+1
         
           set     @commastr 
           insert @returntable (subcolstr) values(substring(@commastr,1,@splitlen-1))
           select @splitstr = substring(@commastr,@splitlen+1,@length),
                         @length=datalength(@splitstr),
                         @splitlen=charindex(',',@splitstr)
                 --------------------------------------------------------------------------------------
                 end
         end        
         --------------------------------------------------------------------------------------------------------------
         end_label:    
         return 
end
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值