动态sql语句超过8000个字符的处理方法
2008-04-14 09:50
555 查看
临时表+动态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
--处理示例
--测试数据
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
相关文章推荐
- 动态sql语句超过8000个字符的处理方法
- 使用动态SQL语句是最简单的处理方法。
- 用动态生成SQL语句的方法处理数据
- mysql 动态生成sql语句执行方法,表格重新产生排序
- 动态SQL语句处理
- sql语句导出数据某个字段是科学记数法处理方法
- sql: 去除数据库表中tab、空格、回车符等特殊字符的解决方法 去除tab、空格、回车符等使用replace语句 按照ASCII码, SELECT char(64) 例如64 对应 @,则se
- 简单高效防注入攻击的动态多参数、动态SQL语句拼接方法,提高网站的安全性
- 使用<a>标签调用struts2的action、传递动态参数、以及参数中出现加号等特殊字符的处理方法
- oracle动态sql语句处理
- SQL或HQL预编译语句,可以防止SQL注入,可是不能处理%和_特殊字符
- EXCEL某列长度超过255个字符导入SQL SERVER2005的处理方法
- (转)SQL 语句中特殊字符的处理及预防sql 注射
- 动态SQL字符长度超过8000【SQL SERVER 2005之完美解决方案】
- MySQL 存储过程中执行动态SQL语句的方法
- SQL的IN参数化查询(字符列表转换成整型的处理方法)
- oracle对动态sql语句的处理
- 动态SQL— —模糊查询语句(存储过程)中关于百分号%的处理
- SQL对like 操作中的特殊字符处理方法
- 动态SQL字符长度超过8000【SQL SERVER 2005之完美解决方案】