ストアドプロシージャの実行と、その結果またはパラメータを通常の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
等
ストアドプロシージャの実行と、その結果またはパラメータを通常の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 内にあります。複製。