动态sql语句超过8000个字符的处理方法

临时表+动态sql语句

--处理示例  
   
  --测试数据  
  create   table   #tmp(Fid   varchar(10),s   Nvarchar(1000))  
  insert   #tmp   select   left(newid(),8),replace(newid(),'-',',')+replace(newid(),'-',',')+replace(newid(),'-',',')  
  from   sysobjects  
  go  
   
  --处理  
  declare   @sql1   nvarchar(4000),@sql2   nvarchar(4000),@sql3   nvarchar(4000),@sql4   nvarchar(4000)  
  ,@i   int,@ic   nvarchar(10)  
   
  --生成数据处理临时表  
  select   id=identity(int,0,1),g=0  
  ,a=N'   union   select   N'+quotename(Fid,N'''')+N',N'''  
  +replace(s,N',',N'''   union   select   N'+quotename(Fid,N'''')+N',N''')+N''''  
  into   #   from   #tmp    
   
  --分组临时表  
  update   a   set   @i=id/i,g=@i  
  from   #   a,(select   i=3800/max(len(a))   from   #)b  
  set   @ic=@i  
   
  --生成数据处理语句  
  select   @sql1=N'',@sql2=N'',@sql3=N'',@sql4=N''  
  while   @ic>=0  
  select   @sql1=N',@'+@ic+N'   nvarchar(4000)'+@sql1  
  ,@sql2=N',@'+@ic+N'=N'''''+@sql2  
  ,@sql3=N',@'+@ic  
  +N'=case   g   when   '+@ic  
  +N'   then   @'+@ic+N'+a   else   @'+@ic  
  +N'   end'+@sql3  
  ,@sql4=N'+@'+@ic+@sql4  
  ,@ic=@ic-1  
  select   @sql1=stuff(@sql1,1,1,N'')  
  ,@sql2=stuff(@sql2,1,1,N'')  
  ,@sql3=stuff(@sql3,1,1,N'')  
  ,@sql4=stuff(@sql4,1,1,N'')  
   
  --执行  
  exec(N'declare   '+@sql1+N'  
  select   '+@sql2+N'  
  select   '+@sql3+N'   from   #  
  set   @0=stuff(@0,1,7,N'''')  
  exec('+@sql4+N')')  
   
  --删除临时表  
  drop   table   #  
  go  
   
  --删除测试  
  drop   table   #tmp

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值