能不能把一个存储过程的结果集放入一个临时表?

Caobiao 2004-05-12 09:43:17
我在一个存储过程A中调用另外一个存储过程B,B返回的是一个表的数据集,我想对它进行操作,把它放入一个临时表,请问怎么写代码呀?我是这样子写的,不行:
Exec sp_test into #tmp
...全文
126 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2004-05-12
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/3016/3016902.xml?temp=.9715082
问题提出:ghosthjt (天煞孤星)
解答:Yang_(扬帆破浪), j9988(j9988)

如果能够方便的得到存储过程结果集的表结构。那存储过程的使用就方便了很多了。比如:
insert into #tmp exec sp_who
要执行这一句,前提必须知道sp_who的结果集的表结构。
这样的语句又不能运行:select * into #tmp from exec sp_who

解答:
1:
select * into #z from OPENROWSET(
'SQLOLEDB',
'SERVER=server;uid=sa;pwd=sapwd;Database=master','exec sp_who') as a

2: 如果存储过程中用到临时表,要用set fmtonly off
select * into #z from OPENROWSET(
'SQLOLEDB',
'SERVER=server;uid=sa;pwd=sapwd;Database=master','SET FMTONLY OFF; exec 存储过程名') as a

Caobiao 2004-05-12
  • 打赏
  • 举报
回复
怎么接不了贴?
zjcxc 元老 2004-05-12
  • 打赏
  • 举报
回复
同意pbsql
Caobiao 2004-05-12
  • 打赏
  • 举报
回复
谢谢!
pbsql 2004-05-12
  • 打赏
  • 举报
回复
两种方法:
1.先建表再执行存储过程:
create table #t(...)
insert into #t exec B
select * from #t
drop table #t

2.直接select into到临时表:
select * into #t from OPENROWSET(
'SQLOLEDB','SERVER=servername;uid=sa;pwd=123;Database=testdb',
'SET FMTONLY OFF;set nocount on;exec B') as a
select * from #t
drop table #t
zicxc 2004-05-12
  • 打赏
  • 举报
回复
知道返回的结构,可以
create table #tmp(col1 int,col2 varchar(30),...)
insert into #tmp(col1,col2,...) exec sp_test

lynx1111 2004-05-12
  • 打赏
  • 举报
回复
insert into #tmp(a,b,c)exec sp_test
Frewin 2004-05-12
  • 打赏
  • 举报
回复
up

34,590

社区成员

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

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