每次我們在使用查詢分析器調試SQL語句的時候,通常會看到一些信息,提醒我們當前有多少個行受到了影響,這是些什么信息?在我們調用的時候這些信息有用嗎?是否可以關閉呢??
答案是這些信息在我們的客戶端的應用程序中是沒有用的,這些信息是存儲過程中的每個語句的DONE_IN_PROC?信息。?
我們可以利用SET?NOCOUNT?來控制這些信息,以達到提高程序性能的目的。?
MSDN中幫助如下:?
?
SET?NOCOUNT?
使返回的結果中不包含有關受?Transact-SQL?語句影響的行數的信息。?
語法?
SET?NOCOUNT?{?ON?|?OFF?}?
注釋?
當?SET?NOCOUNT?為?ON?時,不返回計數(表示受?Transact-SQL?語句影響的行數)。當?SET?NOCOUNT?為?OFF?時,返回計數。?
即使當?SET?NOCOUNT?為?ON?時,也更新?@@ROWCOUNT?函數。?
當?SET?NOCOUNT?為?ON?時,將不給客戶端發(fā)送存儲過程中的每個語句的?DONE_IN_PROC?信息。當使用?Microsoft?SQL?Server?提供的實用工具執(zhí)行查詢時,在?Transact-SQL?語句(如?SELECT、INSERT、?UPDATE?和?DELETE)結束時將不會在查詢結果中顯示"nn?rows?affected"。?
如果存儲過程中包含的一些語句并不返回許多實際的數據,則該設置由于大量減少了網絡流量,因此可顯著提高性能。?
SET?NOCOUNT?設置是在執(zhí)行或運行時設置,而不是在分析時設置。?
權限?
SET?NOCOUNT?權限默認授予所有用戶。?
結論:我們應該在存儲過程的頭部加上SET?NOCOUNT?ON?這樣的話,在退出存儲過程的時候加上?SET?NOCOUNT?OFF這樣的話,以達到優(yōu)化存儲過程的目的。