请教高手动态sql的执行结果怎么存到临时表(列数不固定)

orange1983 2008-06-12 04:59:20
执行了一段动态sql,行转列的,而且列不固定,执行结果用exec(@sql)
以上都没有任何问题,执行结果也对,但是现在我希望能将执行的结果存入一个临时表,该怎么处理?
使用函数,存储过程不限
我现在的做法是一段语句如下
declare @sql1 varchar(4000)
set @sql1=……
……
exec(@sql)
存入临时表怎么处理?
select * into #a exec(@sql)?
编译没问题但是执行时抱错
服务器: 消息 263,级别 16,状态 1,行 5
必须指定要从中选择的表
注意输出列不固定
谢谢了,我没啥分:(
...全文
580 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2008-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 orange1983 的回复:]
我的代码如下
以前是的动态sql是
declare @sql1 varchar(4000)
set @sql1='select 0'
select @sql1=@sql1+',['+sDeptName+']=sum(case sDeptName when '''+sDeptName+''' then MoneyAll else '' '' end)' from (select sDeptName from HrmDept where sDeptId <='04')a
set @sql1='select dDate,'+substring(@sql1,10,len(@sql1))+' from ViewMoneyBackDay group by dDate'
exec(@sql1)
改完后是
declare @sql1 v…
[/Quote]


恭喜楼主自己解决问题
-狙击手- 2008-06-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 orange1983 的回复:]
说两句题外话,小女子今天是第一次发帖,不过以前倒是经常看,从坛子学了不少知识,先谢谢大家了:)
再弱弱地问一句,怎么才能把查询结果和sql代码方便地贴到网上?而且显示出颜色和格式,跟大家发的帖那样
谢谢了,对了,我现在用的还是sqlserver2000
[/Quote]

ubb里的插入代码
orange1983 2008-06-12
  • 打赏
  • 举报
回复
有事先下,明天结帖,谢谢大家了
orange1983 2008-06-12
  • 打赏
  • 举报
回复
说两句题外话,小女子今天是第一次发帖,不过以前倒是经常看,从坛子学了不少知识,先谢谢大家了:)
再弱弱地问一句,怎么才能把查询结果和sql代码方便地贴到网上?而且显示出颜色和格式,跟大家发的帖那样
谢谢了,对了,我现在用的还是sqlserver2000
liangCK 2008-06-12
  • 打赏
  • 举报
回复
使用我的方法.
orange1983 2008-06-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 happyflystone 的回复:]
楼主不试试完美行动的方法:


create table #(id int)
go
declare @sql varchar(10)
set @sql = 'select 1'
insert into # exec(@sql)

select * from #

/*
id
-----------
1

(所影响的行数为 1 行)
*/
[/Quote]
查询出来的列不固定
orange1983 2008-06-12
  • 打赏
  • 举报
回复
我的代码如下
以前是的动态sql是
declare @sql1 varchar(4000)
set @sql1='select 0'
select @sql1=@sql1+',['+sDeptName+']=sum(case sDeptName when '''+sDeptName+''' then MoneyAll else '' '' end)' from (select sDeptName from HrmDept where sDeptId<='04')a
set @sql1='select dDate,'+substring(@sql1,10,len(@sql1))+' from ViewMoneyBackDay group by dDate'
exec(@sql1)
改完后是
declare @sql1 varchar(4000)
set @sql1='select 0'
select @sql1=@sql1+',['+sDeptName+']=sum(case sDeptName when '''+sDeptName+''' then MoneyAll else '' '' end)' from (select sDeptName from HrmDept where sDeptId<='04')a
set @sql1='select * into ##a from(select dDate,'+substring(@sql1,10,len(@sql1))+' from ViewMoneyBackDay group by dDate)a'
exec(@sql1)
select * from ##a
dDate 销售一部 销售一部 外贸部 外埠部
2008-05-13 00:00:00.000 200.0 0.0 0.0 0.0
2008-05-16 00:00:00.000 100.0 0.0 0.0 0.0
2008-05-20 00:00:00.000 1500.0 0.0 0.0 0.0
2008-05-21 00:00:00.000 732.0 1136.0 0.0 0.0
2008-05-22 00:00:00.000 0.0 1243.403 0.0 0.0
2008-05-26 00:00:00.000 1400.0 0.0 0.0 0.0

原数据的情况大概如下
select * from HrmDept
sDept
销售一部
销售二部
外贸部
外埠部
财务部
select * from ViewMoneyBackDay
dDate sDeptName sSale MoneyAll
2008-5-13 销售一部 黄秋玉 200
2008-5-16 销售一部 黄秋玉 100
2008-5-20 销售一部 黄秋玉 1500
2008-5-21 销售一部 黄秋玉 732
2008-5-26 销售一部 黄秋玉 1400
2008-5-21 销售二部 赵士恩 1136
2008-5-22 销售二部 赵士恩 1243.403



-狙击手- 2008-06-12
  • 打赏
  • 举报
回复
楼主不试试完美行动的方法:



create table #(id int)
go
declare @sql varchar(10)
set @sql = 'select 1'
insert into # exec(@sql)

select * from #

/*
id
-----------
1

(所影响的行数为 1 行)
*/
orange1983 2008-06-12
  • 打赏
  • 举报
回复
谢谢大家,刚才试了一下,确实把into ##a 加到拼的sql里再exec就可以了,但是必须是全局变量,局部变量不行,因为执行完exec(@sql1)之后系统自动就释放掉#a了
utpcb 2008-06-12
  • 打赏
  • 举报
回复
列不固定

最好你使用全局临时表 into ##a 注意把这个写到@sql中然后执行
最后
select*
into #a
from ##a
drop table ##a
lff642 2008-06-12
  • 打赏
  • 举报
回复


--这样不行吗?

declare @sql varchar(8000)
set @sql = ''
set @sql = 'select * into # from tb'
exec(@sql)

nzperfect 2008-06-12
  • 打赏
  • 举报
回复
列不固定就在你拼的串@sql里的加上into #
liangCK 2008-06-12
  • 打赏
  • 举报
回复
set @sql='select '
select @sql=@sql+.....

set @sql=@sql+' into ## from tb'

exec (@sql)

select * from ##
lff642 2008-06-12
  • 打赏
  • 举报
回复
把INTO语句写到动态SQL中不行吗?
nzperfect 2008-06-12
  • 打赏
  • 举报
回复
create table #(...)
insert into # exec(@sql)
liangCK 2008-06-12
  • 打赏
  • 举报
回复
看看你的@sql是什么内容..

34,576

社区成员

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

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