2

別のストアド プロシージャ sp_1_1 を呼び出すストアド プロシージャ sp_1 があります。

このトリックを使用して sp_1_1 からの結果を抑制する方法を知っています。

本当の問題は、sp_1_1 自体が別のストアド プロシージャ sp_1_1_1 も呼び出し、その結果が sp_1_1 に返されることです!!

sp_1_1 も sp_1_1_1 も変更できず、sp_1 のみを変更できます。

sp_1 に返される結果は 2 つのレコードセットで、最初のレコードセットは sp_1_1 から、2 番目のレコードセットは sp_1_1_1 からのものです。

まとめ:

sp_1 (下から返された 2 つのレコードセットを抑制する必要があります)

+---- sp_1_1 (独自の結果を返し、次に下から結果を返します)

+---------sp_1_1_1 (結果を返す)

4

1 に答える 1

1

まず、SQL Server "Denali" は、結果セットを処理するための新しいオプションを提供します。

この場合、ネストしているため、insert/exec トリックを使用できないことは明らかです。

あまりリファクタリングしたくない場合の厄介な回避策の 1 つは、@SuppressResults bit = false のようなデフォルトのパラメーターを proc に追加することです。

次に、ネストする必要があるルーチンで、@SuppressResult=True で明示的に呼び出し、@SuppressResults=True の場合に結果を選択しないようにルーチンのコードを変更します。

重要なことは、デフォルトを提供し、パラメータを最後に置くことです。これにより、コード ベースの他の場所からのルーチンへの既存の呼び出しを変更する必要がなくなります。

于 2012-11-09T15:25:11.570 に答える