開発用PCにSQLServer2012のフルバージョンをインストールしています。
ここでは、データのソースとしてストアドプロシージャを使用して新しい一時テーブルを作成する方法を示す例に従おうとしています。複数のストアドプロシージャの結果を1つの一時テーブルに結合しようとしています(さまざまな結果セットの列構造/定義は同じです)。
配管が機能しているかどうかをテストするために、次のクエリを発行します。
SELECT * FROM OPENQUERY("FOO\SQL2012", 'exec mySchema.myStoredProc')
しかし、私はその単純な配管テストの選択クエリからこのエラーを受け取ります:
メッセージ11526、レベル16、状態1、プロシージャsp_describe_first_result_set、1行目
ステートメント'insert #tmp(foo1、foo2、foo3)select' O'as foo1、foo2、foo3' inprocedure'myStoredProc'が使用するため、メタデータを決定できませんでした一時テーブル。
エラーを正しく理解している場合、OPENQUERYは、サーバーがデータベース内の永続的な定義から列のデータ型を抽出できるかどうかに依存し、ストアドプロシージャでインスタンス化された一時テーブルは、一時的なものであり、永続的な定義がありません。その場合、OPENQUERYに可能な限り最善を尽くし、列のデータ型をインテリジェントに推測するように指示する設定はありますか?
これが私がテストしているダミーのSPです:
create proc testproc
as
begin
create table #test
(id int, name varchar(5) );
insert into #test(id,name)values(1,'xxx');
select * from #test;
--drop table #test; -- tried dropping and not dropping, same error either way
end