sql >> Databasteknik >  >> RDS >> Sqlserver

@@ROWCOUNT – Få antalet rader som påverkas av det senaste uttalandet i SQL Server

I SQL Server kan du använda @@ROWCOUNT systemfunktion för att returnera antalet rader som påverkas av den senaste T-SQL-satsen.

Till exempel, om en fråga returnerar 4 rader, @@ROWCOUNT kommer att returnera 4.

Exempel 1 – Välja data

Här är ett grundläggande exempel för att visa hur det fungerar.

SELECT * FROM Dogs;
SELECT @@ROWCOUNT;

Resultat:

+---------+-----------+-----------+
| DogId   | DogName   | GoodDog   |
|---------+-----------+-----------|
| 1       | Fetch     | 0         |
| 2       | Fluffy    | 0         |
| 3       | Wag       | 0         |
+---------+-----------+-----------+
(3 rows affected)
+--------------------+
| (No column name)   |
|--------------------|
| 3                  |
+--------------------+
(1 row affected)

I det här fallet, min SELECT satsen returnerade 3 rader, och så @@ROWCOUNT returnerade 3.

Exempel 2 – Uppdatera data

Här är ett exempel på hur du använder @@ROWCOUNT med en UPPDATERING uttalande för att testa om några rader uppdaterades eller inte.

UPDATE Dogs 
SET GoodDog = 1
WHERE DogId = 4
IF @@ROWCOUNT > 0
    PRINT 'Your dog will be rewarded accordingly';
ELSE
    PRINT 'A dog outside the system cannot be a good dog'
GO

Resultat:

(0 rows affected)
A dog outside the system cannot be a good dog

I det här fallet uppdaterades inga rader eftersom DogId inte fanns i tabellen. Vi kunde använda @@ROWCOUNT med en IF uttalande för att returnera ett lämpligt meddelande till användaren.

Här är den igen, men den här gången finns hunden.

UPDATE Dogs 
SET GoodDog = 1
WHERE DogId = 1
IF @@ROWCOUNT > 0
    PRINT 'Your dog will be rewarded accordingly';
ELSE
    PRINT 'A dog outside the system cannot be a good dog'
GO

Resultat:

(1 row affected)
Your dog will be rewarded accordingly

Extremt stor datauppsättning?

Om du tror att antalet rader som påverkas av ett uttalande kommer att vara mer än 2 miljarder, använd ROWCOUNT_BIG() istället.

Du kan använda det på samma sätt som @@ROWCOUNT används.

UPDATE Dogs 
SET GoodDog = 1
WHERE DogId = 4
IF ROWCOUNT_BIG() > 0
    PRINT 'Your dog will be rewarded accordingly';
ELSE
    PRINT 'A dog outside the system cannot be a good dog'
GO

Resultat:

(0 rows affected)
A dog outside the system cannot be a good dog

När @@ROWCOUNT är återställt

Påståenden som ANVÄND , SET , DEALLOCATE CURSOR , STÄNG MARKÖR , PRINT , RAISERROR , BÖRJA TRANSAKTIONEN , eller BEGÄRNA TRANSAKTION återställ @@ROWCOUNT värde till 0 .

Kör SELECT @@ROWCOUNT i sig själv returnerar också 0 .


  1. Hur man byter ut en del av en sträng i T-SQL

  2. Upprätthålla ordning i MySQL IN-frågan

  3. Hur kan jag få fram antalet poster som påverkas av en lagrad procedur?

  4. Förstå SQL Server alltid krypterad