SET NOCOUNT ON -- 關閉「受影響行數」訊息傳回客戶端
SET NOCOUNT OFF -- 開啟 (預設)
ON 時,不發送 DONE_IN_PROC 封包,查詢工具不顯示 (n rows affected)。@@ROWCOUNT 函數仍正常更新,不受影響。預存程序包含多條不回傳結果集的陳述式 (INSERT/UPDATE/DELETE/SET) 時,關閉行數訊息可大幅減少網路封包,提升高延遲網路下的吞吐量。
CREATE TABLE, INSERT 產生的行數封包)。ADODB.Recordset) 不會過濾,導致 NextRecordset 邏輯錯誤,誤以為有結果集返回。SET NOCOUNT ON,消除雜訊封包。觸發器內若有 SELECT 或變數賦值 (@var = ...) 會產生結果集,導致呼叫端 (如 ADO) 收到多重結果集,刪除多筆資料時拋出:
Key column information is insufficient or incorrect. Too many rows were affected by update.
對策:觸發器開頭務必加 SET NOCOUNT ON;嚴禁在觸發器輸出任何結果。
SET NOCOUNT ON。OFF。SET ANSI_NULLS ON, SET QUOTED_IDENTIFIER ON 形成標準模板。養成 SET NOCOUNT ON 習慣,能避開 80% 的「多重結果集」與網路效能問題。