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 :

TSQL Challenge 7


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut TSQL Challenge 7
    Bonjour à tous,

    Rui Carvalho à posté le 7ème challenge de la série des TSQL Challenges.

    Attention, la date limite est le 25 mai !

    Le challenge traduit en français est disponible ici et certainement bientôt sur rui.fr

    Bon amusement

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Par défaut
    Merci pour la traduction car je n'avais rien compris sous la version anglaise

    Ma contribution
    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
     
    create TABLE #T (BASE sysname,[TABLE] sysname,SIZE int,[ROWS] INT) 
    DECLARE @dataname as sysname,@strquery varchar(8000)
    declare CursDatabase CURSOR FOR select name from sys.databases where name not in('master','tempdb','msdb','model')
    open CursDatabase
    fetch CursDatabase into @dataname
    WHILE @@FETCH_STATUS = 0
    BEGIN
    select @strquery = 'use '+@dataname+' insert into #T select Top 5 '''+@dataname+''',a2.name,SUM(CASE WHEN(ps.index_id<2)THEN(ps.in_row_data_page_count+ps.lob_used_page_count+ps.row_overflow_used_page_count)ELSE(ps.lob_used_page_count+ps.row_overflow_used_page_count)END)*8,SUM(CASE WHEN (ps.index_id < 2)THEN row_count ELSE 0 END ) FROM sys.dm_db_partition_stats ps INNER JOIN sys.all_objects a2 ON(ps.object_id=a2.object_id)INNER JOIN sys.schemas a3 ON(a2.schema_id=a3.schema_id)WHERE a2.type<>N''S''and a2.type<>N''IT''GROUP BY ps.object_id,a2.name ORDER BY 3desc'
    exec(@strquery)
    fetch CursDatabase into @dataname
    end
    CLOSE CursDatabase
    DEALLOCATE CursDatabase
    select Top 5 BASE,[TABLE],convert(varchar,SIZE)+' KB'SIZE,[ROWS] from #T order by SIZE desc
    drop table #T
    @ +

  3. #3
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Merci Imalta,

    Sous 2005 et 2008, il faudrait aussi exclure les bases ReportServer et ReportServerTempDB

    @+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 26
    Par défaut
    Bonjour,

    petite erreur dans ma requete je remonte des KO et non des KB il suffit donc d'enlever le multiplicateur par 8 pour avoir l'information demandée.
    @+

  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 001
    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 001
    Billets dans le blog
    6
    Par défaut
    Imalta, il me semble que ta solution est incorrecte, car elle doit fonctionner avec TOUTES les versions de SQL Server.
    Or cela ne fonctionne pas avec 2000.
    J'ai posé la question à Rui.

    De plus tu as limité ta query à 8000 car. Si la base comporte 4000 tables... Cela ne passera pas !

    Enfin tu as oublié le schéma SQL de la table.... Toutes les bases n'ont pas qu'un seul schéma et deux schémas SQL différents peuvent comporter une table de même nom !

    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
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 001
    Billets dans le blog
    6
    Par défaut
    Voici d'ailleurs ma solution (inspirée de la tienne) :

    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
    CREATE TABLE ##T 
    (BASE    sysname, 
     [TABLE] sysname, 
     SIZE    int, 
     [ROWS]  INT) 
     
    DECLARE @DB AS sysname, 
            @Q varchar(max)
     
    SET @Q = ''
     
    SELECT @Q = @Q + 'USE ' + name +';INSERT ##T SELECT Top 5 ''' + name + ''', s.name + ''.'' + a.name, SUM(used_page_count) + SUM(reserved_page_count), row_count FROM sys.dm_db_partition_stats p INNER JOIN sys.all_objects a ON(p.object_id=a.object_id) INNER JOIN sys.schemas s ON (a.schema_id=s.schema_id) WHERE a.type<>''S''and a.type<>''IT'' GROUP BY p.object_id, s.name +''.'' +a.name, row_count ORDER BY 3 desc;'
    FROM sys.databases 
    WHERE name NOT IN ('master', 'tempdb', 'msdb', 'model')
     
    EXEC(@Q)
     
    SELECT Top 5 BASE, [TABLE], CAST(SIZE AS VARCHAR(99)) + ' KB' SIZE, [ROWS] 
    FROM   ##T 
    ORDER  BY SIZE desc
    Et ce qu'elle donne sur mon PC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BASE         TABLE                            SIZE      ROWS
    ------------ -------------------------------- --------- -------
    DB_GUID      dbo.T_ID2                        964 KB    50000
    DB_SIG       Hotel.ChambrePlanningClient      95 KB     14562
    DB_SEM       S_CIN.T_FILM_FLM                 8 KB      1
    DB_SIG       Client.Client                    8 KB      101
    DB_SIG       Hotel.ModePaiement               8 KB      3
    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. TSQL Challenge 9
    Par agemis31 dans le forum Développement
    Réponses: 12
    Dernier message: 21/09/2009, 11h57
  2. Annonce: TSQL Challenge 10
    Par agemis31 dans le forum Développement
    Réponses: 8
    Dernier message: 26/06/2009, 08h03
  3. TSQL Challenges: appel à contribution
    Par agemis31 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 19/06/2009, 22h32
  4. Annonce: TSQL Challenges
    Par agemis31 dans le forum Développement
    Réponses: 25
    Dernier message: 14/06/2009, 19h50
  5. TSQL Challenge 8
    Par agemis31 dans le forum Développement
    Réponses: 8
    Dernier message: 27/05/2009, 20h32

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