42

私は持っている多くの手順がありset nocount onます。

ストアドプロシージャの最後にオフにする必要がありますか?

例えば:

create procedure DummyProc
as
begin
    set nocount on
    ...
    set nocount off
end
4

4 に答える 4

44

set nocount onX rows affected.SQL が返すメッセージを無効にします。このメッセージは、場合によっては、ストアド プロシージャを実行しているクライアントの望ましくない影響のために抑制されます。

set nocount offこの抑制を取り消します。ただし、set nocount onこれはスコープ設定であり、既定では、いずれにせよスコープを離れるとオフになります。

さて、set nocount off必要ですか?いいえ、実行される新しいコマンドは別のスコープにあり、デフォルトset nocount offでは常に有効であるためです。ただし、上記のコメントで述べたように、proc の実行が終了したときにこの設定が通常に戻ることを明示的に示すことは、良い習慣と見なされます。

于 2011-11-21T19:29:21.697 に答える
8

これはかなり古い投稿であることは知っていますが、答えを探したときに Google で最初にヒットしたのはこれでした。それをテストするための上記の応答は非常に良い考えでした。

私はこれをテストし、いくつかの追加の詳細で上記を更新したいと考えました.

SET NOCOUNT ON で作成したスコープは、プロシージャが呼び出すすべての proc に流れます。したがって、プロシージャが SET NOCOUNT ON を実行してから sproc を呼び出すと、その sproc が SET NOCOUNT 設定を取得します。sprocを終了すると設定は消えますが、設定は呼び出されたsprocに流れ込みます。CALLED sproc の内部で SET NOCOUNT を設定すると、外側の sproc はそれが設定した SET NOCOUNT を持ち、内側の sproc は外側の sproc に影響を与えません。

したがって、設定が sproc から上向きに流れ出すことは決してないため、sproc の最後で実際にリセットする必要はないと思います。ただし、sproc が設定に依存している場合は、必要になる前に設定する必要があります。別の sproc から呼び出された場合、想定とは異なる設定になる可能性があるためです。

于 2016-04-14T10:32:32.777 に答える
4

見たくない場合のみ

(1 row(s) affected) // or n rows....

ほとんどの場合 - デバッグするとき

そして、print コマンドを使用します。つまり、独自の純粋なテキストを表示したいので、これは良い習慣です。

編集

クエリの結果には影響しません(オンまたはオフ-問題ありません)-それがあなたの求めているものである場合。(ありがとうJNK)。

于 2011-11-21T19:17:16.657 に答える
1

それは簡単です。別のプログラムがプロシージャを実行している場合は必要ありません。私のpythonコードがmssqlプロシージャを呼び出しているとしましょう。その場合、アプリで影響を受ける行数は必要ないので、コードに「set nocount on」を必ず「設定する必要があります」

于 2021-04-14T16:39:17.117 に答える