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

来源:互联网 发布:局域网视频聊天软件 编辑:程序博客网 时间:2024/05/15 04:44

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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿园小朋友不听老师话怎么办 孩子在幼儿园不听老师话怎么办 幼儿园大班孩子上课不好好上怎么办 脸上挠了血印子怎么办 大班公开课烫伤了怎么办教案 孩子心理出现了问题该怎么办 幼师打孩子很多家长告怎么办 课堂上纪律不好的学生怎么办 孩子上幼儿园总感冒怎么办 孩子上幼儿园总生病怎么办 台湾人抗拒统大陆人中国人怎么办 如果一年的公休日耍不完怎么办 我一个月要歇三天班怎么办 学校没给报到证怎么办 员工休息一天老板拉着脸怎么办 换工作了报到证怎么办 幼儿园的孩子不写作业怎么办 幼儿园宝宝不写作业怎么办 幼儿园孩子不写作业怎么办 光盘数据面写字了怎么办 娃娃的手断了怎么办 联币金融跑路了怎么办 胃消化不了想吐怎么办 吃撑了恶心想吐怎么办 mac口红膏体晃动怎么办 excl图标和以前不一样了怎么办 冰箱显示板坏了怎么办 冰箱电脑显示屏坏了怎么办 冰箱的电子显示屏坏了怎么办 指导别人炒股亏损了怎么办 没有协议委托别人炒股亏损怎么办 炒股亏了很多钱崩溃了怎么办 帮人炒股亏了很多钱怎么办 破净买入继续跌怎么办 国画颜色上错了怎么办 宝宝5个月脸一直开裂怎么办 宝宝冻脸怎么办小妙招 3岁小儿长期便秘怎么办 脚裂了怎么办小妙招 宝宝脸风吹裂了怎么办 宝宝脸被风吹裂了怎么办