Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

@@ROWCOUNT - Obtenir le nombre de lignes affectées par la dernière instruction dans SQL Server

Dans SQL Server, vous pouvez utiliser le @@ROWCOUNT fonction système pour renvoyer le nombre de lignes affectées par la dernière instruction T-SQL.

Par exemple, si une requête renvoie 4 lignes, @@ROWCOUNT renverra 4.

Exemple 1 – Sélection de données

Voici un exemple de base pour montrer comment cela fonctionne.

SELECT * FROM Dogs;
SELECT @@ROWCOUNT;

Résultat :

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

Dans ce cas, mon SELECT l'instruction a renvoyé 3 lignes, et donc @@ROWCOUNT renvoyé 3.

Exemple 2 – Mise à jour des données

Voici un exemple d'utilisation de @@ROWCOUNT avec une UPDATE pour tester si des lignes ont été mises à jour ou non.

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

Résultat :

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

Dans ce cas, aucune ligne n'a été mise à jour car le DogId n'existait pas dans la table. Nous avons pu utiliser @@ROWCOUNT avec un IF pour renvoyer un message approprié à l'utilisateur.

Le revoici, mais cette fois le chien existe.

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

Résultat :

(1 row affected)
Your dog will be rewarded accordingly

Ensemble de données extrêmement volumineux ?

Si vous pensez que le nombre de lignes affectées par une instruction va être supérieur à 2 milliards, utilisez ROWCOUNT_BIG() à la place.

Vous pouvez l'utiliser de la même manière que @@ROWCOUNT est utilisé.

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

Résultat :

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

Quand @@ROWCOUNT est réinitialisé

Des déclarations telles que USE , SET <option> , DEALLOCATE CURSOR , CLOSE CURSOR , PRINT , RAISERROR , BEGIN TRANSACTION , ou COMMIT TRANSACTION réinitialiser le @@ROWCOUNT valeur à 0 .

Exécution de SELECT @@ROWCOUNT par lui-même renverra également 0 .