3

私が直面している問題は、実行中に別のストアドプロシージャ(sp_twoと呼びましょう)を呼び出すストアドプロシージャ(sp_oneと呼びましょう)があることです。

sp_oneの結果セットのみを最後に返し、sp_twoの結果セットは返さないようにします。sp_twoから結果をキャプチャして、それらも返されないようにする方法があると思いますが、このための構文を理解することはできませんでした。

何か案は?

起こっていることの本質を捉えたいくつかの擬似コード(私の実際のコードではありません):

CREATE PROCEDURE sp_two AS 
BEGIN
  update Users
  set is_valid = 0

  select * from Users
END


CREATE PROCEDURE sp_one
AS
BEGIN
  exec sp_two
  select * from Users
END

exec sp_one

exec sp_oneを実行した結果は、sp_twoの結果セットであり、次にsp_oneの結果です。(例:usersテーブルを2回)。

4

2 に答える 2

4

まず第一に、ここに同様の質問があります

この種のソリューションはボトルネックになりやすいため、使用することはお勧めしません。データ処理をより明確な方法で行うことに焦点を当てるべきだと思います(ただし、あなたの質問の例は単なる理論的な例であると私は理解しています)

しかし、本当にこのようなものを使用したい場合は、返される行の危険性を測定すると思います。

1:何行が返されますか?

2:返却セットの幅はどれくらいですか?

そして、「大したことではない」と思うなら、一時テーブルの代わりにメモリテーブルを使用すると思います(物理的な書き込みは行わないでください)。

DECLARE @users TABLE (...fields here...)
INSERT INTO @users
EXEC sp_two 
于 2012-09-04T14:53:59.550 に答える
3

sp_one、を使用できます

CREATE TABLE #temporaryusers (Usertable fields here)
INSERT INTO #temporaryusers 
EXEC sp_two 

DROP TABLE #temporaryusers 

結果を飲み込む。

于 2012-09-04T14:35:18.977 に答える