3

を使用して行のカウントを無効にしましSET NOCOUNT ONたが、sqlserverはまだ行をカウントしているようです。

USE Northwind
SET  NOCOUNT ON;
SELECT * FROM Products p
SELECT @@ROWCOUNT AS 'RowCount';

クエリは行数として77を返しますが、なぜですか?

4

2 に答える 2

6

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に設定すると、ネットワークトラフィックが大幅に削減されるため、パフォーマンスが大幅に向上します。」

于 2012-10-10T21:58:54.857 に答える
1

この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つの結果セットのみが返されます。

于 2012-10-10T22:00:34.503 に答える