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 :

Liste des tables avec leur nombre d'enregistrements


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Liste des tables avec leur nombre d'enregistrements
    Bonjour,

    Je voudrais lister le nom des tables d'une base de données puis
    pour chaque table compter le nombre d'enregistrements contenus.

    Pour lister le nom des tables, j'ai trouvé :
    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    Mais après je ne sais pas comment faire pour compter le nombre d'enregistrements pour chacune des tables.
    Utiliser la fonction COUNT mais comment ?
    en créant une procédure stockée, une vue ou en utilisant les curseurs .

    Est-ce que quelqu'un pourrait m'aider

    Merçi

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    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
     
    CREATE TABLE #toto
    (name_ varchar(50),
    rows_ int,
    reserved varchar(50),
    data varchar(50), 
    index_size varchar(50), 
    unused varchar(50))
     
    DECLARE @NAME varchar(50)
    DECLARE curseur CURSOR FOR
     
    select name from sysobjects where type = 'U' 
     
    OPEN curseur
    FETCH NEXT FROM curseur INTO
    @NAME
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    INSERT INTO #toto (name_,rows_,reserved,data,index_size,unused)
    EXEC sp_spaceused @NAME 
     
    FETCH NEXT FROM curseur INTO
    @NAME
    END
    Close curseur
    DEALLOCATE curseur
     
    select * from #toto order
    j'suis vert !

  3. #3
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 66
    Points
    66
    Par défaut
    Ce n'est pas de moi, mais d'une copine (merci Audrey !!!) :

    On utilisera des sous-requêtes :

    (a,b,c, et d sont les alias des sous-requête.
    xxx,yyy,zzz et www sont les alias des colonnes affichant les résultats.)


    Select a.*, b.*, c.*, d.*
    from
    (Select COUNT(*) as xxx from NomDeLaTableX)a,
    (Select COUNT(*) as yyy from NomDeLaTableY)b,
    (Select COUNT(*) as zzz from NomDeLaTableZ)c,
    (Select COUNT(*) as www from NomDeLaTableW)d

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 847
    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 847
    Points : 52 955
    Points
    52 955
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par HULK Voir le message
    ...

    select name from sysobjects where type = 'U'

    ...
    sysobjects n'est plus valide depuis la version 2005. Utilisez au moins sys.objects
    De plus vous ne prenez pas en compte le schéma SQL.. Toutes les tables ne sont pas dans le schéma à défaut de l'utilisateur qui lance ledit traitement !
    Enfin, comme vous n'utilisez pas les crochets si des tables ont un nom "anormal" alors cela va planter !

    Une solution plus élégante et plus rapide est de faire une seule requête dynamique avec des unions ALL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DECLARE @SQL NVARCHAR(max)
    SET @SQL = '';
    SELECT @SQL = @SQL + 'SELECT ''' +s.name +'.' + o.name +''' AS NOM_TABLE, COUNT(*) AS NOMBRE_LIGNE FROM [' + s.name +'].[' + o.name + '] UNION ALL '
    FROM   sys.objects AS o
           INNER JOIN sys.schemas AS s
                 ON o.schema_id = s.schema_id
    WHERE  "type" = 'U'             
    SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) - 10);
    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/ * * * * *

  5. #5
    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 : 42
    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,

    On peut aussi utiliser la DMV sys.dm_db_partition_stats, ce qui évite le COUNT(*) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT		S.name + '.' + T.name AS qualified_table_name
    		, T.create_date
    		, COUNT(*) AS partition_count
    		, SUM(PS. row_count) AS total_row_count
    		, SUM(PS.reserved_page_count) * 8192 AS table_size_bytes
    FROM		sys.dm_db_partition_stats AS PS 
    INNER JOIN	sys.tables AS T
    			ON PS.object_id = T.object_id
    INNER JOIN	sys.schemas AS S
    			ON S.schema_id = T.schema_id
    WHERE		PS.index_id BETWEEN 0 AND 1 
    AND		T.name <> 'sysdiagrams'
    GROUP BY	S.name, T.name, T.create_date
    C'est plus ou moins ce que j'ai publié ici

    @++

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 847
    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 847
    Points : 52 955
    Points
    52 955
    Billets dans le blog
    6
    Par défaut
    ATTENTION : s’agissant de tables "stats" le résultat n'est pas garanti comme étant exact !

    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/ * * * * *

Discussions similaires

  1. Cherche liste des EventID avec leur signification
    Par fadsys dans le forum PureBasic
    Réponses: 1
    Dernier message: 17/09/2009, 12h37
  2. Réponses: 4
    Dernier message: 26/03/2009, 14h58
  3. Récupérer la liste des tables avec HSQLDB
    Par Kerod dans le forum JDBC
    Réponses: 1
    Dernier message: 23/02/2009, 17h48
  4. Réponses: 6
    Dernier message: 25/06/2008, 09h57
  5. Réponses: 3
    Dernier message: 17/08/2007, 16h17

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