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 :

Comptage d'un table donnée dans une "cellule"


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut Comptage d'un table donnée dans une "cellule"
    Bonjour à tous,
    Désolé pour le titre pas du tout clair, mais je ne vois vraiment pas comment exprimer ce que je recherche en 2/3 mots.

    Je me doute bien de la réponse, mais j'aimerai confirmation.
    Sous SQL Server 2008 R2, je fais un select [...] FROM [... avec tout plein de jointures]

    Ca me donne un résultat du genre :
    |colonne1 |colonne2 |.....|NomDeTable     |
    +---------+---------+-----+---------------+
    |bla bla  +bla bla  +.....+dbo.AutreTable1|
    +---------+---------+-----+---------------+
    |bla bla  +bla bla  +.....+dbo.AutreTable2|
    
    J'aimerai inclure, dans la même requête, une colonne qui ramènerai le nombre de lignes présentes dans les tables données dans la colonne "NomDeTable", en gros :
    |colonne1 |colonne2 |.....|NomDeTable     |NbLignes|
    +---------+---------+-----+---------------+--------|
    |bla bla  +bla bla  +.....+dbo.AutreTable1|12      |
    +---------+---------+-----+---------------+--------|
    |bla bla  +bla bla  +.....+dbo.AutreTable2|0       |
    
    Je ne peux en aucun cas passer par un sp_execute ou je ne sais quelle autre fourberie, la requête dois être faite en une fois.
    Si ce n'est pas possible, comme je le pense, j'obtiendrai ces valeurs par code.

    Du coup je ne vois pas du tout comment je peux faire ca. Faut dire que je suis pas bien doué en SQL.

    Il y peut être moyen en faisant des jointures sur les tables système non ? Enfin, je suis pas bien fan de cette solution (a supposé que ce soit possible)

    EDIT: Ah oui, j'ai oublié de préciser un détail qui change peut être la donne. En fait je m'en fout complètement du nombre exacte d'enregistrements dans les tables, ce que je voudrais c'est savoir si il y a ou non des enregistrements, leurs nombre n'a pas d'intérêt.

  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
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    En utilisant les tables système, vous pouvez obtenir une bonne approximation avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   SUM(p.rows) AS NOMBRE_LIGNE
    FROM     sys.partitions p
             INNER JOIN sys.objects O
               ON p.object_ID = O.object_id
    WHERE    p.index_id IN (0, 1)
      AND    p.object_id = OBJECT_ID('???')
    Ou ??? est le nom de votre table (avec son préfixe de schéma).

    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 émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Merci bien de la réponse, je garde ca sous le coude, je testerai lundi.
    Et sinon, quid de l'impacte sur les perfs de faire des jointures sur les tables system pour ca ?

    Je veux dire, qu'est-ce qui serait le plus performant ? faire tout en une requête via des jointures sur les tables système, ou bien exécuter la requêtes "principale", puis exécuter un count(*) sur chaque table ?
    Ca me semble bien lourd d'attaquer les tables système extrêmement volumineuses uniquement pour savoir si 3 ou 4 tables son vides ou non.

  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 : 44
    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
    Par défaut
    Bonjour,

    Je veux dire, qu'est-ce qui serait le plus performant ? faire tout en une requête via des jointures sur les tables système, ou bien exécuter la requêtes "principale", puis exécuter un count(*) sur chaque table ?
    Ca me semble bien lourd d'attaquer les tables système extrêmement volumineuses uniquement pour savoir si 3 ou 4 tables son vides ou non.
    Dans tous les cas faire des jointures ne pose aucun problème, pourvu que vos tables soient bien indexées.

    A l'évidence rechercher le nombre de lignes d'une table dans les vues système est bien plus rapide est moins coûteux en termes de performances, que de compter toutes les lignes de chacune des tables de votre base de données.

    J'avais publié comment trouver le nombre de lignes de toutes les tables ici

    @++

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Mais tu as oublié un SUM sur le nombre de lignes car s'il y a deux partitions tu va avoir 2 résultats !

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

  6. #6
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Voila qui est fort intéressant. Je pensais qu'inclure les tables système était fort couteux. Merci bien pour ces infos, Je teste ca dès que je suis de retour au boulot.

    @SQLpro: La précision est d'importance, on a effectivement fait plusieurs partitions

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

Discussions similaires

  1. Liste de données dans une seule cellule.
    Par azure dans le forum Excel
    Réponses: 2
    Dernier message: 09/04/2008, 18h25
  2. Réponses: 4
    Dernier message: 19/09/2005, 15h59
  3. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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