SET NOCOUNT ON är ett angivet meddelande som förhindrar meddelandet som visar antalet rader som påverkas av T-SQL-frågeformulär. Detta används inom lagrade procedurer och utlösare för att undvika att visa meddelandet om raderade rader. Använda SET NOCOUNT ON inom en lagrad procedur kan förbättra prestanda för den lagrade proceduren med en betydande marginal.
Ange NOCOUNT ON: Detta förhindrar att meddelandet visar vilken som innehåller antalet rader som berörs.
Ställ in NOCOUNT OFF: Detta visar antalet drabbade rader i ett meddelandefönster.
SET NOCOUNT ON förhindrar att DONE_IN_PROC-meddelanden skickas till klienten för varje uttalande i en lagrad procedur.
För lagrade procedurer som innehåller flera uttalanden som inte returnerar mycket faktiska data eller för procedurer som innehåller Transact-SQL-loopar, kan inställning av SET NOCOUNT till ON ge en betydande prestationsökning eftersom nätverkstrafiken minskas kraftigt.
Ställ in NOCOUNT på / av med ett exempel
SET NOCOUNT PÅ VÄLJ UPP 10 * FRÅN SYS procedurer; SET NOCOUNT OFF VÄLJ TOPP 10 * FRÅN SYS procedurer;
Användning av SET NOCOUNT ON i de första T-SQL-förklaringarna förhindrar att antalet raderade rader meddelas.
Ange NOCOUNT med @@ ROWCOUNT Funktion
Detta har ingen inverkan på @@ Rowcount-funktionen som visar antalet drabbade rader inom en sats.
Ange NOCOUNT ON Förklara @ Temp tabell (Nummer INT); INSERT INTO @Temp-värdena (1), (2), (3), (4); SELECT @@ ROWCOUNT som NoOfRowsAffected; Ställ in NOCOUNT OFF
Med @ @ ROWCOUNT-funktionen inom SET NOCOUNT ON återställs inte @ @ ROWCOUNT-värdet. Kolumnen NoOfRowsAffected visar fyra rader som påverkades av föregående INSERT-uttalande.
Använda SET NOCOUNT ON / OFF inom en lagrad procedur
Ange ANSI_NULLS ON GÅ SET QUOTED_IDENTIFIER PÅ GÅ LÄGE PROCEDURE ABC_INSERT_DATA AS BEGIN - Ställ in NOCOUNT ON tillsatt för att förhindra att extra resultatuppsättningar kommer att störa SELECT-satser. Ange NOCOUNT ON; Förklara @ Temp tabell (Nummer INT); INSERT INTO @Temp-värdena (1), (2), (3), (4); VÄLJ * FRÅN @Temp; END GO
Utför lagrade procedurer ovan
EXEC ABC_INSERT_DATA
Du kan se på skärmbilden ovan att det exekverade lagrade förfarandet inte visar antalet raderade rader. Använda SET NOCOUNT ON inom lagrade procedurer rekommenderas som bästa praxis för prestandatestning i SQL Server.
Du kan bläddra i våra SQL Server arkivartiklar för mer användbar information.