Я только что столкнулся с этой проблемой, и лучше поздно, чем никогда ...
Это выполнимо, но чудовищная боль в заднице, связанная с " прокси-таблицей Sybase ", которая заменяет другой локальный или удаленный объект (таблица, процедура, представление). Следующее работает в 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
из localhost, но вы можете заменить
это для любого сервера, зарегистрированного в
таблица системных серверов.
- Параметр _timestamp преобразуется в @timestamp, когда Sybase выполняет сохраненный процесс, и все объявленные таким образом столбцы параметров должны быть определены как null.
Затем вы можете выбрать из этой таблицы свой собственный db:
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