ストアドプロシージャの実行と、その結果またはパラメータを通常の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
等.
いいえ、一時テーブルを使用する必要があります
create table #results (col1 int, col2 varchar(5) ...)
INSERT INTO #results
EXEC YourProcedure @parma...
その後、あなたはそれに参加することができます
SELECT
*
FROM YourTable y
JOIN #results r ON ...
....
プロシージャの列とデータ型がわからない場合は、次の優れた回答を使用できます。 ストアドプロシージャの結果を一時テーブルに挿入します
簡単に言うと、OPENROWSET
を使用して、すべての列に名前を付けて型を知る必要なしに、オンザフライで作成される#tempテーブルにストアドプロシージャを実行します。
SPをインラインテーブル値UDFとして書き換えることができる場合、これらは通常、非常に優れたパフォーマンスを発揮し、パラメーター化されたビューと同等です。ITVFは、テーブルまたはビューを使用する任意の場所で使用できます。
SPがインラインTVF(ローカル変数の操作が必要)として機能しない場合は、マルチステートメントTVF(BEGIN/ENDを含む)として機能する可能性があり、パフォーマンスが低下する場合としない場合があります。あなたがしなければならないことに応じて。
SPがUDFに変換された後でも、SP(SELECT * FROM udf(params))または他の場所からUDFを呼び出すことができます。結合などに使用できるため、すべてのコードがUDF内にあります-重複はありません。