2012-10-10 51 views
3

我已經使用SET NOCOUNT ON禁用了行計數,但似乎sqlserver仍在計數行。SQL Server不斷對行進行計數

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

查詢返回77行計數,爲什麼?

回答

6

SET NOCOUNT ON;

防止在執行存儲過程時返回rowcount。它對@@ 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可提供顯著的性能提升,因爲網絡流量大大減少。」

+1

這是否意味着設置nocount對性能沒有影響? –

+0

與存儲過程一起使用會產生積極影響 –

1

nocount設置不計數,行存到數據庫,它保持它返回的updateinsert查詢結果集

例:

create procedure test1 
as 
insert into Products (ProductName) values ('Fork') 
select scope_identity() as ProductId 

調用該PROC edure將返回兩個結果集,第一個結果集爲空,並且具有受影響的行數爲1的信息,第二個結果集包含具有產品ID的記錄。

VS:

create procedure test1 
as 
set nocount on 
insert into Products (ProductName) values ('Fork') 
select scope_identity() as ProductId 

調用該程序將只返回一個結果集,包含產品ID。