Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

@@ROWCOUNT:ottieni il numero di righe interessate dall'ultima istruzione in SQL Server

In SQL Server puoi utilizzare @@ROWCOUNT funzione di sistema per restituire il numero di righe interessate dall'ultima istruzione T-SQL.

Ad esempio, se una query restituisce 4 righe, @@ROWCOUNT restituirà 4.

Esempio 1 – Selezione dei dati

Ecco un esempio di base per dimostrare come funziona.

SELECT * FROM Dogs;
SELECT @@ROWCOUNT;

Risultato:

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

In questo caso, il mio SELECT l'istruzione ha restituito 3 righe, quindi @@ROWCOUNT restituito 3.

Esempio 2 – Aggiornamento dei dati

Ecco un esempio di utilizzo di @@ROWCOUNT con un UPDATE istruzione per verificare se alcune righe sono state aggiornate o meno.

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

Risultato:

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

In questo caso, nessuna riga è stata aggiornata perché il DogId non esisteva nella tabella. Siamo stati in grado di utilizzare @@ROWCOUNT con un IF istruzione per restituire un messaggio appropriato all'utente.

Eccolo di nuovo, ma questa volta il cane esiste.

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

Risultato:

(1 row affected)
Your dog will be rewarded accordingly

Set di dati estremamente grande?

Se ritieni che la quantità di righe interessate da un'istruzione sarà superiore a 2 miliardi, utilizza ROWCOUNT_BIG() invece.

Puoi usarlo allo stesso modo di @@ROWCOUNT viene utilizzato.

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

Risultato:

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

Quando @@ROWCOUNT è Ripristina

Dichiarazioni come USE , SET <option> , DEALLOCATE CURSOR , CLOSE CURSOR , PRINT , RAISERROR , BEGIN TRANSACTION o COMMIT TRANSACTION reimposta il @@ROWCOUNT valore a 0 .

Esecuzione di SELECT @@ROWCOUNT da solo restituirà anche 0 .