如何将存储过程返回的结果集,插入到临时表
的有关信息介绍如下:数据库在做复杂业务逻辑统计的时候,经常需要使用到存储过程,而且,在存储过程中,也会经常返回列表结果集,那么,在不修改存储过程内部代码的情况下,如何将存储过程返回的列表结果集,插入到一个新的临时表中呢?
本文以sqlserver数据库为例说明。首先连接上数据库,新建一个存储过程,为存储过程指定名字,比如叫做 up_GetTable,此处不设置传入参数,也暂时没有存储过程的内部代码
在存储过程内部,定义一个临时表,用于模拟物理数据库表,作为存储过程返回列表结果集的数据源
-- 定义一个临时表
if OBJECT_ID('tempdb..#tblTmp') is not null drop table #tblTmp;
create table #tblTmp(
Code varchar(50),
Price int,
Remark varchar(200)
)
在存储过程内部,往临时表中插入几行测试数据
insert into #tblTmp(Code, Price, Remark) values('Item001', 10, '单价就是这么低!');
insert into #tblTmp(Code, Price, Remark) values('Item002', 100, '单价还行!');
insert into #tblTmp(Code, Price, Remark) values('Item003', 10000, '单价就是这么任性!');
在存储过程内部,使用select语句,返回整个临时表的数据。之后,删除刚刚创建的临时表
select * from #tblTmp;
if OBJECT_ID('tempdb..#tblTmp') is not null drop table #tblTmp;
到此,演示的存储过程代码就写完了,按F5,就可以直接将存储过程代码提交到数据库,提交成功后会显示“命令已成功完成”
在存储过程外部,执行存储过程,可以看到存储过程内部插入的数据,都返回过来了
EXEC [dbo].[up_GetTable]
在存储过程外部,定义一个与存储过程返回结果相同的临时表,然后,使用insert into语句,将存储过程返回的结果插入到这个新的临时表,最后查询这个新的临时表。可以看到存储过程返回的列表结果集都已经按照预期插入到了临时表中
if OBJECT_ID('tempdb..#tblFromTmp') is not null drop table #tblFromTmp;
create table #tblFromTmp(
Code varchar(50),
Price int,
Remark varchar(200)
);
insert into #tblFromTmp EXEC [dbo].[up_GetTable];
select * from #tblFromTmp;