web-dev-qa-db-ja.com

T-SQLでストアドプロシージャとクエリを組み合わせる

ストアドプロシージャの実行と、その結果またはパラメータを通常のSQLクエリで使用することを組み合わせるにはどうすればよいですか?

たとえば、次のようなことをしたいと思います。

-- passing result of SELECT to SP
SELECT a, b FROM t
EXEC my_sp a, b

-- passing result of SP to INSERT    
INSERT INTO t
EXEC my_sp a, b

等.

19
abatishchev

いいえ、一時テーブルを使用する必要があります

create table #results (col1 int, col2 varchar(5) ...)

INSERT INTO #results
   EXEC YourProcedure @parma...

その後、あなたはそれに参加することができます

SELECT
    *
    FROM YourTable     y
        JOIN #results  r ON ...
    ....

プロシージャの列とデータ型がわからない場合は、次の優れた回答を使用できます。 ストアドプロシージャの結果を一時テーブルに挿入します

簡単に言うと、OPENROWSETを使用して、すべての列に名前を付けて型を知る必要なしに、オンザフライで作成される#tempテーブルにストアドプロシージャを実行します。

24
KM.

SPをインラインテーブル値UDFとして書き換えることができる場合、これらは通常、非常に優れたパフォーマンスを発揮し、パラメーター化されたビューと同等です。ITVFは、テーブルまたはビューを使用する任意の場所で使用できます。

SPがインラインTVF(ローカル変数の操作が必要)として機能しない場合は、マルチステートメントTVF(BEGIN/ENDを含む)として機能する可能性があり、パフォーマンスが低下する場合としない場合があります。あなたがしなければならないことに応じて。

SPがUDFに変換された後でも、SP(SELECT * FROM udf(params))または他の場所からUDFを呼び出すことができます。結合などに使用できるため、すべてのコードがUDF内にあります-重複はありません。

4
Cade Roux