web-dev-qa-db-ja.com

動的一時テーブルへのストアドプロシージャの実行

私の知る限り;私がやりたいことはSQLでは不可能ですが、皆さんにお尋ねする価値があります。

列IDと値を返すストアドプロシージャabcがあるとします。このストアドプロシージャは、主に機能上の理由から他の部門で使用されており、データチェックのために時々使用するだけです。

したがって、私のストアドプロシージャの一部として使用します。

DECLARE @tABC TABLE
(
   ID      INT,
   Value   DECIMAL(12,2)
)

INSERT INTO @tABC
   EXEC OtherDb.DataProd.abc

わかりましたので、これは今のところ完全に動作しますが、ストアドプロシージャの構造を変更したらどうなりますか?

ストアドプロシージャの列を追加または削除するとコードが破損するため、コードをより柔軟にする方法があります。

私の最後の必死の試みは次のようなものでした:

WITH tempTable AS
(
    EXEC OtherDb.DataProd.abc
)
SELECT ID, Value FROM tempTable

それは明らかに惨めに失敗しました。

14
JAT
SELECT * INTO #TempTable 
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
     'EXEC OtherDb.DataProd.abc')

SELECT * FROM #TempTable
8
Raj

一時テーブルに挿入します。これは2008年以降に機能することはわかっていますが、2005年についてはわかりません。一時テーブルの列は、ストアドプロシージャの列と一致する必要があります。

create table #mytable (custid int,company varchar(50),contactname varchar(50)
                , phone varchar(50),address1 varchar(50)
                , address2 varchar(50),city varchar(50)
                ,st varchar(2),Zip varchar(20))

insert into #mytable (custid,company,contactname,phone,address1,address2,city,st,Zip)
exec dbo.sp_Node_CustomerList_wService @segid = 1

select * from #mytable
where custid = 5

drop table #mytable
6
Tim Melton

それ以外の場合は、こちらをご覧ください。そこには、さらに多くのオプションが説明されています。 ストアドプロシージャの結果を一時テーブルに挿入

0
NickyvV

openrowsetを使用するより良い簡単な方法です

SELECT * INTO #tempTable FROM OPENROWSET( 'SQLNCLI'、 'Server = localhost; Trusted_Connection = yes;'、 'EXEC OtherDb.DataProd.abc')

0
Ali Yesilli