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
.