IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Comparaison de taille d'une base après exécution d'une procédure stockée


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Comparaison de taille d'une base après exécution d'une procédure stockée
    Bonjour à tous,

    Actuellement en apprentissage, j'ai créé une procédure stockée qui supprime des affaires et tout ce qui s'y rattache dans différentes tables d'une base. Maintenant je souhaiterai connaître le nombre d'enregistrements (total des lignes insérées) de cette base après exécution de la procédure. L'idée est donc de comparer l'ancienne et nouvelle base pour voir si ma proc l'a bien "épurée".

    Je vous remercie par avance,

    Damien

    PS : j'ai bien recherché dans le forum une solution à mon problème, mais en vain...

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous avez plusieurs choix :
    - Soit votre procédure stockée est exécutée "à la main" et contient l'option de session SET NOCOUNT ON, et à ce moment là vous ne voyez pas le nombre de lignes affectées par chaque instruction, et vous pouvez tout simplement choisir d'enlever cette option

    - Soit cette procédure stockée est exécutée depuis une application, (ce qui explique le SET NOCOUNT ON), et pour chaque instruction vous disposez de la valeur retournée par la fonction @@ROWCOUNT, qui contient le nombre de lignes affectées par la dernière instruction exécutée dans la session.

    - Vous pouvez vous aider de la procédure stockée système sp_spaceused pour en stocker le résultat dans une table, avant et après la mise à jour de vos données, et faire les comparaison par ce biais à la fin du traitement.

    @++

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci de ta proposition que j'ai pris soin d'étudier.
    Je n'ai pas précisé que je travaillé sur MS SQL Server 2000, deplus j'ai découvert qu'il existait des procédures toutes faites pour les versions 2005 et 2008.
    Or je n'arrive toujours pas à trouver la bonne requête qui va parcourir ma base (donc toutes les tables) afin de compter le nombre de lignes.
    Je peux créer un cursor fetch pour chaque table et compter les lignes, cependant avec une centaine de table je souhaiterai utiliser une procédure + courte et + optimisée.

    Cordialement,

    Damien

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Si toutes vos tables ont un index cluster, c'est possible en interrogeant la table sysindexes (colonne : rowcnt)

    @++

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour en complétant la réponse d'Elsuket,

    Vous le pouvez également si vous n'avez pas d'index cluster. Il suffit pour cela de récupérer dans la table sysindexes les valeurs indid = 0 ou = 1

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
     SUM(i.rowcnt) nb_rows
    FROM dbo.sysobjects o
    INNER JOIN dbo.sysindexes i
    ON o.id = i.id
    WHERE o.xtype = 'U'
     AND o.name IN ('vos tables concernés par la mise à jour')
      AND i.indid IN (0,1)
    ++

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour vos réponses, ça marche niquel et j'ai pu avancer à grand pas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/01/2013, 16h29
  2. Réponses: 1
    Dernier message: 15/07/2009, 16h53
  3. Réponses: 3
    Dernier message: 22/10/2008, 17h55
  4. Affichage d'une image après insertion dans une base
    Par leloup84 dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 16h34
  5. Maj d'une base 7.0 vers une base 2000
    Par ditter dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2005, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo