sybaseASE15に取り組んでいます。このようなものを探しています
Select * into #tmp exec my_stp;
my_stpは、各行に2つの列がある10個のデータ行を返します。
sybaseASE15に取り組んでいます。このようなものを探しています
Select * into #tmp exec my_stp;
my_stpは、各行に2つの列がある10個のデータ行を返します。
ASE 15では、関数を使用できると思いますが、複数行のデータセットには役立ちません。
ストアドプロシージャが「どこかからcol1、col2を選択」してデータを返している場合、そのデータを取得する方法はなく、クライアントにフローバックするだけです。
できることは、データを一時テーブルに直接挿入することです。これは、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
Sybaseについてはわかりませんが、SQL Serverでは次のように動作するはずです:
INSERT INTO #tmp (col1、col2、col3...) exec my_stp
my_stp が異なるテーブルから値を計算してデータを入力している場合、my_stp とまったく同じことを行う同等のビューを作成できます。
CREATE VIEW My_view
AS
/*
My_stp body
*/
Then select data from view
SELECT * INTO #x FROM my_view