@@ROWCOUNT - 2eme Partie

Quelques  doutes m'assaillant depuis mon post sur cette variable, j'ai réalisé quelques tests très simples et consulté notre bible à tous..la MSDN :-)

Voici l'exemple très simple (la table T1 contient 5 lignes) :

DECLARE @i INT 
SET @i = 5 
SELECT * FROM T1 
IF(@i = 5) 
BEGIN  
    PRINT 'OK'  
    PRINT @@ROWCOUNT 
END 
ELSE 
BEGIN  
    PRINT 'KO'  
    PRINT @@ROWCOUNT 
END
END


Et le résultat :

 

(5 ligne(s) affectée(s))
OK
0


L'instruction IF renvoie donc O (ce qui paraît logique).
Je n'ajoute pas de PRINT @@ROWCOUNT avant ce IF car le PRINT affecterais la valeur 0 à notre variable (je l'ai fait au préalable de cet exemple pour vérifier que l'on ai bien la valeur 5 renvoyé).

 

De la même manière les instructions de type

 

  • d'affectation (SET, SELECT sans requêtes comme SELECT GETDATE()) renvoient un @@ROWCOUNT  = 1
  • toute requête de sélection ou retour de fonction renvoient un @@ROWCOUNT  = nombre de lignes affectées
  • EXECUTE permet de conserver la valeur antérieure de @@ROWCOUNT
  • Les débuts et commit de transaction réinitialisent notre @@ROWCOUNT à 0

Enfin notons que l'instruction SET ROWCOUNT int permet de définir le nombre de lignes maximum traitées par une requête. Dès que int est atteint, le moteur arrête de traiter le reste de la requête (incluant triggers et les types de curseurs KEYSET et INSENSITIVE).

Pour terminer avec ce ROWCOUNT, notons également le ROWCOUNT_BIG() qui renvoie un BIGINT au lieu d'un INT pour les valeurs > 2 milliards

Publié samedi 5 avril 2008 11:31 par guldan
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: @@ROWCOUNT - 2eme Partie @ lundi 7 avril 2008 10:45

>>> Enfin notons que l'instruction SET ROWCOUNT int permet de définir le nombre de lignes maximum traitées par une requête. Dès que int est atteint, le moteur arrête de traiter le reste de la requête (incluant triggers et les types de curseurs KEYSET et INSENSITIVE). <<<

Petite remarque, dans le cas d'une requête incluant un tri sur une colonne non indexée, le plan d'exécution montre que l'intégralité du jeu de données est traité, et ensuite seulement les premières lignes sont renvoyées (ce qui est logique). Faites donc bien attention à ça si vous utilisez ROWCOUNT à des fins d'optimisation ;)

KooKiz


Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 1 heure et 41 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59