を使用して行のカウントを無効にしましSET NOCOUNT ON
たが、sqlserverはまだ行をカウントしているようです。
USE Northwind
SET NOCOUNT ON;
SELECT * FROM Products p
SELECT @@ROWCOUNT AS 'RowCount';
クエリは行数として77を返しますが、なぜですか?
を使用して行のカウントを無効にしましSET NOCOUNT ON
たが、sqlserverはまだ行をカウントしているようです。
USE Northwind
SET NOCOUNT ON;
SELECT * FROM Products p
SELECT @@ROWCOUNT AS 'RowCount';
クエリは行数として77を返しますが、なぜですか?
NOCOUNTをオンに設定します。
ストアドプロシージャを実行するときに行数が返されないようにします。@@rowcountには影響しません。
特定の情報については、 http://msdn.microsoft.com/en-us/library/ms189837.aspxを参照してください。
SET NOCOUNTがONの場合でも、@@ROWCOUNT関数は更新されます。
SET NOCOUNT ONは、ストアドプロシージャのステートメントごとにDONE_IN_PROCメッセージがクライアントに送信されないようにします。実際のデータをあまり返さない複数のステートメントを含むストアドプロシージャの場合、またはTransact-SQLループを含むプロシージャの場合、SET NOCOUNTをONに設定すると、ネットワークトラフィックが大幅に削減されるため、パフォーマンスが大幅に向上します。」
このnocount
設定は、データベースが行をカウントするのを防ぎません。データベースがクエリの結果セットupdate
を返すのを防ぎます。insert
例:
create procedure test1
as
insert into Products (ProductName) values ('Fork')
select scope_identity() as ProductId
そのプロシージャを呼び出すと、2つの結果セットが返されます。最初の結果セットは空で、影響を受ける行の数が1であるという情報があり、2番目の結果セットには製品IDのレコードが含まれています。
対:
create procedure test1
as
set nocount on
insert into Products (ProductName) values ('Fork')
select scope_identity() as ProductId
そのプロシージャを呼び出すと、製品IDを含む1つの結果セットのみが返されます。