SQL Server SET NOCOUNT

SET NOCOUNT

Transact-SQL ステートメントまたはストアド プロシージャで処理された行数を示すメッセージが結果セットの一部として返すか返さないかを設定します。

デフォルトでは SET NOCOUNT はOFFの状態です。
下の例で確認してください。

SQL Server SET NOCOUNT 実行例
SQL Server SET NOCOUNT 実行例

最初はデフォルトなので、そのまま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 を実行します。