私の知る限り;私がやりたいことは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
それは明らかに惨めに失敗しました。
SELECT * INTO #TempTable
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
'EXEC OtherDb.DataProd.abc')
SELECT * FROM #TempTable
一時テーブルに挿入します。これは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
それ以外の場合は、こちらをご覧ください。そこには、さらに多くのオプションが説明されています。 ストアドプロシージャの結果を一時テーブルに挿入 ?
openrowsetを使用するより良い簡単な方法です
SELECT * INTO #tempTable FROM OPENROWSET( 'SQLNCLI'、 'Server = localhost; Trusted_Connection = yes;'、 'EXEC OtherDb.DataProd.abc')