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

MS SQL Server Discussion :

[SQL2K]Compter les lignes de chaque table.


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Mamilie
    Inscrit en
    Février 2007
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2007
    Messages : 288
    Par défaut [SQL2K]Compter les lignes de chaque table.
    Bonjour,
    je cherche à compter les lignes de chaque table de ma base de donnée.

    J'ai essayé la requête de la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select O.Name as Table_Name, I.Rows as Rows_Count
    FROM sysobjects O join sysindexes I
              ON O.id=I.id
    Where O.xtype='U'
    Mais je me retrouve avec un comptage de chaque colonne de chaque table. Du coup j'ai 2 questions:
    -Comment faire pour ajouter le nom de la colonne à chaque fois
    -Comment faire pour ensuite n'avoir qu'une seule ligne de résultat pour chaque table.

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    ATTENTION : la table sysindexes donne des indications et non la réalité. Le nombre de ligne donné à titre indicatif est celui qui était valable au moment ou l'index a été construit. Si vous voulez quelque chose d'exact, ce n'est pas comme cela qu'il faut procéder. Voici une autre manière avec du SQL dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE @SQL VARCHAR(max)
     
    SET @SQL = ''
     
    SELECT @SQL = @SQL + 'SELECT ''' + TABLE_SCHEMA+'.'+TABLE_NAME 
                + ''' AS NOM_TABLE, (SELECT COUNT(*) FROM ' + TABLE_SCHEMA +'.' + TABLE_NAME + ' ) AS NB_LIGNE UNION '
    FROM   INFORMATION_SCHEMA.TABLES
     
    SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) - 6)
     
    EXEC (@SQL)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé Avatar de Mamilie
    Inscrit en
    Février 2007
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2007
    Messages : 288
    Par défaut
    Merci de votre réponse.

    Il me dit qu'il y a une erreur de syntaxe autour de max.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Server: Nachr.-Nr. 170, Schweregrad 15, Status 1, Zeile 1
    Zeile 1: Falsche Syntax in der Nähe von 'max' .
    Bon c'est en allemand en plus, ça ne me facilite pas les choses.

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    rowcnt dans sysindexes est bien mis à jour tout au long de la vie de l'index, tu peux te baser sur cette colonne.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Par défaut
    J'utilise çà... un peu longuet mais à toutes épreuves...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    create procedure [dbo].[_psv_NbLignesTables] 
    as
    begin
    declare 
    	@tbl varchar(50),
    	@cmd varchar(8000)
     
    -- Liste des tables de la bdd
    set nocount on
    set nocount off
     
    declare curTbl cursor local forward_only for
    select name
    from sysobjects
    where xtype = 'U' 
    order by 1
     
    open curTbl
    fetch next from curTbl into @tbl
     
    select @cmd = ''
     
    while @@FETCH_STATUS = 0
    begin
     
    set @cmd = @cmd + 'select '''+ @tbl +''' [Table], count(*) NbLigne from ' + @tbl + ' union all '
     
    fetch next from curTbl into @tbl
    end
     
    set @cmd = substring(@cmd, 1, len(@cmd)-10)
    exec(@cmd)
     
    close curTbl
    deallocate curTbl
     
    end -- fin procedure
    go
    exec _psv_NbLignesTables
    La solution préconisée plutot me tente mais j'ai le même message que Mamilie... mais en français moi ! (ouf parce que l'allemand...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Msg 170, Niveau 15, État 1, Ligne 1
    Ligne 1 : syntaxe incorrecte vers 'max'.
    Msg 137, Niveau 15, État 1, Ligne 5
    La variable '@SQL' doit être déclarée.
    Msg 137, Niveau 15, État 2, Ligne 5
    La variable '@SQL' doit être déclarée.
    Msg 137, Niveau 15, État 2, Ligne 9
    La variable '@SQL' doit être déclarée.
    Msg 137, Niveau 15, État 2, Ligne 11
    La variable '@SQL' doit être déclarée.

  6. #6
    Membre éclairé Avatar de Mamilie
    Inscrit en
    Février 2007
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2007
    Messages : 288
    Par défaut
    Citation Envoyé par Crotte
    La solution préconisée plutot me tente mais j'ai le même message que Mamilie... mais en français moi ! (ouf parce que l'allemand...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 170, Niveau 15, État 1, Ligne 1
    Ligne 1 : syntaxe incorrecte vers 'max'.
    Ca me rassure que je ne sois pas la seule à avoir cette erreur.
    Mon prblème ne vient toutefois pas vraiment de l'allemand mais plutôt de mon niveau en MS SQL Server
    Je vais essayer ta solution en attendant...
    Merci!

Discussions similaires

  1. [Toutes versions] [VBA] Macro permettant de compter les caractères de chaque ligne d'un tableau
    Par SiLiCe dans le forum VBA Word
    Réponses: 2
    Dernier message: 28/07/2011, 15h06
  2. [MySQL] Compter les lignes "NULL" d'une table
    Par Budy123 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/03/2010, 12h05
  3. Réponses: 4
    Dernier message: 05/09/2008, 11h03
  4. Compter les lignes d une <TABLE>
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/01/2005, 14h43
  5. [C#] Compter les lignes d'un DataSet
    Par alexischmit dans le forum ASP.NET
    Réponses: 13
    Dernier message: 26/04/2004, 15h17

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