正在使用sybase ASE 15.正在寻找类似这样的东西
Select * into #tmp exec my_stp;
my_stp返回10个数据行,每行有两列。
答案 0 :(得分:6)
在ASE 15中,我相信你可以使用函数,但它们不会对多行数据集提供帮助。
如果你的存储过程返回带有“select col1,col2 from somewhere”的数据,那么就无法获取该数据,它只会流回客户端。
您可以做的是将数据直接插入临时表。这可能有点棘手,就好像你在sproc中创建临时表一旦sproc完成运行就被删除而你没有看到内容。这方面的技巧是在sproc之外创建临时表,但是从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
答案 1 :(得分:5)
我刚遇到这个问题,迟到总比没有好......
这是可行的,但是屁股上的一个巨大的痛苦,涉及Sybase“proxy table”,它是另一个本地或远程对象(表,过程,视图)的代表。以下工作在12.5中,较新的版本希望有更好的方法。
假设您将存储过程定义为:
create procedure mydb.mylogin.sp_extractSomething (
@timestamp datetime) as
select column_a, column_b
from sometable
where timestamp = @timestamp
首先切换到tempdb:
use tempdb
然后创建一个代理表,其中列与结果集匹配:
create existing table myproxy_extractSomething (
column_a int not null, -- make sure that the types match up exactly!
column_b varchar(20) not null,
_timestamp datetime null,
primary key (column_a)) external procedure at "loopback.mydb.mylogin.sp_extractSomething"
注意事项:
然后,您可以从您自己的数据库中选择这样的表:
declare @myTimestamp datetime
set @myTimestamp = getdate()
select *
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp
这很简单。然后插入临时表,首先创建它:
create table #myTempExtract (
column_a int not null, -- again, make sure that the types match up exactly
column_b varchar(20) not null,
primary key (column_a)
)
并合并:
insert into #myTempExtract (column_a, column_b)
select column_a, column_b
from tempdb..myproxy_extractSomething
where _timestamp = @myTimestamp
答案 2 :(得分:0)
结果是,人们可以像这样简单地对待the procedure as a table:
DECLARE LOCAL TEMPORARY TABLE tblLocks(connId INT);
INSERT INTO tblLocks
SELECT conn_id
FROM sa_locks() -- add () after the procedure name
我还尝试了使用 SQL Anywhere 16 的用户定义过程,其工作原理相同。
答案 3 :(得分:-1)
不确定Sybase,但在SQL Server中,以下内容应该有效:
INSERT INTO #tmp(col1,col2,col3 ...)exec my_stp
答案 4 :(得分:-1)
如果my_stp通过计算来自不同表的值来填充数据,则可以创建与my_stp完全相同的等效视图。
CREATE VIEW My_view
AS
/*
My_stp body
*/
Then select data from view
SELECT * INTO #x FROM my_view