18

Sql Server 2008 データベースにストアド プロシージャを作成しています。影響を受けた行数を返したい。SET NOCOUNT OFF と RETURN @@ROWCOUNT のどちらがよいでしょうか?

ALTER PROCEDURE [dbo].[MembersActivateAccount]
    @MemberId uniqueidentifier
AS
BEGIN
    -- Should I use this?
    SET NOCOUNT OFF;

    UPDATE [dbo].Members SET accountActive = 1 WHERE id = @MemberId;
    --Or should I SET NOCOUNT ON and use the following line instead?
    --return @@ROWCOUNT;
END

どちらも機能することはわかっていますが、どちらがより良い選択であり、その理由は何ですか?


いくつか試した結果、ストアド プロシージャ内ではデフォルトで SET NOCOUNT が OFF であるという結論に達しました。データベース内でこの動作を変更することは可能ですか?

4

5 に答える 5

6

値に RETURN を使用しないでください。慣例により、ストアド プロシージャからの RETURN はエラー コード用です。0 はエラーがないことを意味し、0 以外は何らかの問題があることを意味します。データを戻す必要がある場合、適切な方法は OUTPUT パラメーターを使用することです。これは、他の言語の return の使用に基づくと、少し直感に反します。

于 2009-08-26T18:36:51.847 に答える
2

SET NOCOUNT ON/OFF を使用する理由:

任意のテーブルに行を挿入する際のスタック オーバーフローを制御します。クエリまたはネストされたクエリの実行中に T-Sql メッセージを渡す。実行された最新のクエリを表示または表示します。最新の記録エスカレーションに関する情報を取得するため。

于 2011-12-29T10:21:58.077 に答える
-1

SET NOCOUNT の on/off を使用する理由 ---

回答:次の手順でこれを理解できます

ステップ 1 : クエリ「テーブル名から上位 10 件を選択 *」を実行します。

ステップ 2 : メッセージ ウィンドウを開くと、「10 行が影響を受けました」というメッセージが表示されます。余分なオーバーヘッドが発生し、実行時間が長くなります。

ステップ 3 : この余分なオーバーヘッドを克服するために、SET NOCOUNT ON を使用します。On の場合、行が返される回数はカウントされず、コマンドが正常に完了したというメッセージが表示されます。

ステップ4:デフォルトではNOCOUNTはONであり、返された行の数をカウントします。これが、データベースサーバーからより良いパフォーマンスを得るために新しいプロシージャを作成するときにオフにする必要があるという私の提案です。

于 2013-12-23T11:10:49.533 に答える