1

私は SQL Server 2008 R2 を使用しており、ストアド プロシージャの結果を、呼び出し元のストアド プロシージャで後でアクセスできる一時テーブルに取得しようとしています。私のTSQLは次のとおりです。

CREATE PROCEDURE sp_ToBeCalled AS
(
   @SomeParam INT
)
BEGIN
    SELECT * FROM tblSomeTable WHERE SomeField = @SomeParam 
END


CREATE PROCEDURE sp_CallingProcedure AS
(
   @SomeOtherParam INT
)
BEGIN
    -- A
    SELECT * INTO #MyTempTable FROM sp_ToBeCalled(@SomeOtherParam)

    -- B
    SELECT * FROM #MyTempTable FOR XML RAW
END

これはすべて正常にコンパイルされますが、sp_CallingProcedure ステートメントを呼び出すと、B は #MyTempTable というエラーを返します。

最初に #MyTempTable の構造を宣言しなくても、#MyTempTable テーブル内から結果にアクセスできるようにするには、「A」を実行するにはどうすればよいですか?

一般的に使用できるソリューションを探しています。クエリ可能な結果を​​取得する必要があるさまざまな呼び出し元から呼び出す必要がある既存のストアド プロシージャが多数あります。既存のストアド プロシージャを変更できません。

使いたくない

  1. OPENQUOERY()- カスタムのリンク サーバー定義が必要です
  2. sp_ExecSql()- SP コンパイル時間チェックを提供しない動的 SQL を構築する必要があることを意味します。
4

2 に答える 2

1

表関数のようなプロシージャを使用しようとしています。

使ってみて

INSERT INTO #MyTempTable (column1, column2...)
exec sp_ToBeCalled(@SomeOtherParam)
于 2013-04-29T22:27:32.177 に答える