我刚遇到这个问题,迟到总比没有好......
这是可行的,但是非常麻烦,涉及一个 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"
注意事项:
- “loopback”是 Sybase 等效项
本地主机,但您可以替换
它适用于在
服务器的 sysservers 表。
- 当 Sybase 执行存储过程时,_timestamp 参数被转换为 @timestamp,并且所有像这样声明的参数列都必须定义为 null。
然后你可以从你自己的数据库中像这样从表中选择:
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