SET NOCOUNT
Transact-SQL ステートメントまたはストアド プロシージャで処理された行数を示すメッセージが結果セットの一部として返すか返さないかを設定します。
デフォルトでは SET NOCOUNT はOFFの状態です。
下の例で確認してください。
最初はデフォルトなので、そのままselect文やupdate文の処理行数を表示します。
次に SET NOCOUNT ON を実行したので、select文やupdate文共に処理行数の表示をしません。ただし @@ROWCOUNT は正常にカウントされています。
最後は SET NOCOUNT OFF を実行したので、再度select文やupdate文の処理行数を表示します。
このように SET NOCOUNT は、Transact-SQL ステートメントまたはストアド プロシージャで処理された行数を示すメッセージが結果セットの一部として返すか返さないかの設定ができます。
SET NOCOUNT ON
SET NOCOUNT ONが良く使われる場面は、ストアドプロシージャで処理を実行したときやクエリアナライザのメッセージタブに表示される「(– 件処理されました)」というメッセージ(DONE_IN_PROCメッセージ)を出さないようにできます。
ストアドプロシージャで各ステートメントの完了時にクライアントアプリケーションにステートメントが処理された行数をメッセージとして送っていると、自ら設定したPRINT文の表示するメッセージを見つけにくくなるばかりか、メッセージを処理するSMDBやサーバーからクライアントに送信するためネットワークに無駄な負荷を掛けます。
このため、ストアドプロシージャではSET NOCOUNT ONによるメッセージ抑制がパフォーマンス管理には有効と考えられています。
SET NOCOUNT OFF
上で示したメリットよりも、処理件数メッセージが送られて来る(表示される)方がメリットが高い場合は、デフォルトが OFF なので通常は何もしないで良いのですが、ON にした後に OFF にしたい場合などは、SET NOCOUNT OFF を実行します。