急,急,急!求教这句SQL语句怎么写?

benwangz 2004-08-20 09:38:13
这是邹建兄给的一个解决变量超过8000的一个存储过程
CREATE PROCEDURE t1
AS

--查询处理
declare @sqlhead varchar(8000),@sqlend varchar(8000)
,@sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000),@sql4 varchar(8000)
,@i int,@ic varchar(20),@sql nvarchar(4000),@ss varchar(8000),@table varchar(400),@Sheet varchar(400)

--生成数据处理临时表


set @table='#t'
set @sql='select id=identity(int,0,1),gid=0,a='',sum(case 省 when ''''''+省+'''''' then 数量 else 0 end) [数量(''+省+'')],sum(case 省 when ''''''+省+'''''' then 金额 else 0 end) [金额(''+省+'')]'' into ##t from(select distinct 省 from Gs_GRSWL)a'

exec(@sql)

--判断需要多少个变量来处理
select @i=max(len(a)) from ##t

set @i=3800/@i

--分组临时表
update ##t set gid=id/@i
select @i=max(gid) from ##t





--生成数据处理语句
select @sqlhead='''select 项目 '''
,@sqlend=''' from Gs_GRSWL group by 项目'''
,@sql1='',@sql2='select ',@sql3='',@sql4=''

while @i>=0
select @ic=cast(@i as varchar),@i=@i-1
,@sql1='@'+@ic+' varchar(8000),'+@sql1
,@sql2=@sql2+'@'+@ic+'='''','
,@sql3='select @'+@ic+'=@'+@ic+'+a from ##t where gid='+@ic
+char(13)+@sql3
,@sql4=@sql4+'+@'+@ic

select @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)
,@sql2=left(@sql2,len(@sql2)-1)+char(13)
,@sql3=left(@sql3,len(@sql3)-1)
,@sql4=substring(@sql4,2,8000)


--执行
exec( @sql1+@sql2+@sql3+'
exec('+@sqlhead+'+'+@sql4+'+'+@sqlend+')'
)
drop table ##t
GO
下面这一句也是调用邹建兄的一个把数据导出到EXCEL表中的存储过程
exec p_exporttb @sqlstr=@s,@path='c:\',@fname='aa.xls',@sheetname=@n --转EXCEL

我现在的问题是要把导出EXCEL这句SQL 代入到
exec( @sql1+@sql2+@sql3+'
exec('+@sqlhead+'+'+@sql4+'+'+@sqlend+')'
) 中,并把'+@sqlhead+'+'+@sql4+'+'+@sqlend+' 代入到@sqlstr=@s 中的@s 位置上
我试了多次,但不行。请各位高手指点一下。





...全文
121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
benwangz 2004-08-20
  • 打赏
  • 举报
回复
邹兄就是邹兄,厉害。给分
zjcxc 元老 2004-08-20
  • 打赏
  • 举报
回复
--执行
exec( @sql1+@sql2+@sql3+'
exec('+@sqlhead+'+'+@sql4+'+'+@sqlend+')'
)

--改为
exec( @sql1+@sql2+@sql3+'
exec(''select * into ##tb from(''+'+@sqlhead+'+'+@sql4+'+'+@sqlend+'+'')a
'')')
exec p_exporttb @sqlstr='select * from ##tb',@path='c:\',@fname='aa.xls',@sheetname=@n
loverpyh 2004-08-20
  • 打赏
  • 举报
回复
uuuuuuuuuuuuuuuup
benwangz 2004-08-20
  • 打赏
  • 举报
回复
是啊,我试了多遍都不行,看上去简单,但难
zjcxc 元老 2004-08-20
  • 打赏
  • 举报
回复
那就麻烦了
benwangz 2004-08-20
  • 打赏
  • 举报
回复
也就是exec( @sql1+@sql2+@sql3+'
exec('+@sqlhead+'+'+@sql4+'+'+@sqlend+')'
)
换成
exec( @sql1+@sql2+@sql3+'
exec p_exporttb @sqlstr=@s,@path='c:\',@fname='aa.xls',@sheetname=@n '
)
benwangz 2004-08-20
  • 打赏
  • 举报
回复
我要把查出的数据导出到EXCEL表中
zjcxc 元老 2004-08-20
  • 打赏
  • 举报
回复
不明白楼主要怎么代入法

第一个是解决交叉表处理中的,第二个是导出excel的,这两个之间有什么关联?

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧