如何将数据从存储过程获取到临时表中?

时间:2020-03-06 15:03:56  来源:igfitidea点击:

我正在使用sybase ASE15. 正在寻找类似的东西

Select * into #tmp exec my_stp;

my_stp返回10个数据行,每行两列。

解决方案

不确定Sybase,但是在SQL Server中应该可以进行以下操作:

插入#tmp(col1,col2,col3 ...)exec my_stp

在Sybase SQL Anywhere中,

INSERT INTO #tmp (col1,col2,col3...) select * from my_stp()

我相信在ASE 15中可以使用函数,但是它们对多行数据集无济于事。

如果我们存储的proc返回带有"从某处选择col1,col2"的数据,则无法获取该数据,它只会流回到客户端。

我们可以做的是将数据直接插入到临时表中。这可能有点棘手,就像我们在sproc中创建临时表一样,一旦sproc完成运行并且我们看不到其内容,就会将其删除。技巧是在存储过程之外创建临时表,但要从存储过程中引用它。这里的难点是,每次重新创建存储过程时,都必须创建临时表,否则会出现"找不到表"错误。

--You must use this whole script to recreate the sproc    
    create table #mine
    (col1 varchar(3),
    col2 varchar(3))
    go
    create procedure my_stp
    as
    insert into #mine values("aaa","aaa")
    insert into #mine values("bbb","bbb")
    insert into #mine values("ccc","ccc")
    insert into #mine values("ccc","ccc")
    go
    drop table #mine
    go

运行代码:

create table #mine
(col1 varchar(3),
col2 varchar(3))
go

exec my_stp
go

select * from #mine
drop table #mine
go