SET NOCOUNT (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics

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

Topic link iconTransact-SQL 構文表記規則

構文

  
SET NOCOUNT { ON | OFF }   

Note

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

解説

SET NOCOUNT が ON の場合、カウントは返されません。 SET NOCOUNT が OFF の場合、行数が返されます。

SET NOCOUNT が ON の場合でも、@@ROWCOUNT 関数は更新されます。

SET NOCOUNT ON を指定すると、ストアド プロシージャ内の各ステートメントに対する DONEINPROC メッセージは、クライアントに送信されなくなります。 このため、実際に返すデータが少量のステートメントで構成されるストアド プロシージャ、または Transact-SQL ループを含むプロシージャの場合、ネットワーク通信量が大きく減少するので、SET NOCOUNT を ON に設定するとパフォーマンスが大きく向上します。

SET NOCOUNT で指定される設定は、解析時ではなく実行時に有効になります。

この設定の現在の設定を表示するには、次のクエリを実行します。

DECLARE @NOCOUNT VARCHAR(3) = 'OFF';  
IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON';  
SELECT @NOCOUNT AS NOCOUNT;  
  

アクセス許可

ロール public のメンバーシップが必要です。

次の例では、影響を受けた行数に関するメッセージを表示しないようにします。 次の例では、"(影響を受けた 5 行)" は最初の SELECT ステートメントからのみクライアントに返されます。

USE AdventureWorks2012;  
GO  
SET NOCOUNT OFF;  
GO  
-- Display the count message.  
SELECT TOP(5) LastName  
FROM Person.Person  
WHERE LastName LIKE 'A%';  
GO  
-- SET NOCOUNT to ON to no longer display the count message.  
SET NOCOUNT ON;  
GO  
SELECT TOP(5) LastName  
FROM Person.Person  
WHERE LastName LIKE 'A%';  
GO  
-- Reset SET NOCOUNT to OFF  
SET NOCOUNT OFF;  
GO  

参照