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 :

Taille occupée de toutes les tables de chaque BDD


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut Taille occupée de toutes les tables de chaque BDD
    Bonjour,

    J'ai créé la procédure suivante mais cela ne fonctionne pas.

    Le USE n'est pas pris en compte...

    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
    40
    Declare @temp varchar(50), @DBName_ varchar(100), @TBName_ varchar(100), @Size_ float
    Declare @sql varchar(5000)
     
    --Création de la table temporaire
    CREATE TABLE #sp_spaceused (TBName varchar(150), NbRows bigint, SReserved varchar(50), SData varchar(50), Sindex varchar(50), SFree varchar(50))
     
    Declare cursor_db CURSOR
    --On liste les basses des données
    For  SELECT name AS DBName FROM master.dbo.sysdatabases
    OPEN cursor_db
    	Fetch next from cursor_db
    	INTO @DBName_
    		WHILE @@Fetch_STATUS = 0
    		BEGIN
    			--Print 'SELECT table_name FROM information_schema.tables WHERE table_Catalog= ''' + @DBName_ + ''' '
    			--Print 'USE ' + @DBName_ 
    			--On liste les tables...
    			Execute('USE ' + @DBName_ )
    			Declare cursor_size CURSOR
    			For  SELECT table_name FROM information_schema.tables WHERE table_Catalog= @DBName_ and Table_Type = 'BASE TABLE'			
    			OPEN cursor_size
    				Fetch next from cursor_size
    				INTO @TBName_
    					WHILE @@Fetch_STATUS = 0
    					BEGIN			
    						insert into #sp_spaceused execute sp_spaceused @TBName_
    					Fetch next from cursor_size
    				INTO @TBName_
    				END
    			CLOSE cursor_size;
    			DEALLOCATE  cursor_size;
     
    		Fetch next from cursor_db
    		INTO @DBName_
    		END
    	CLOSE cursor_db;
    DEALLOCATE  cursor_db;
     
    select * from #sp_spaceused
    Drop Table #sp_spaceused
    Comment faire pour lister toutes les tables de chaque base de données en une seule procédure?

    Merci d'avance


    Portekoi

  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 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Votre demande m'ayant bien amusée, voici le résultat :
    http://blog.developpez.com/sqlpro/p8...s-de/#more8530

    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 régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Merci pour votre réponse mais en quoi ma demande vous a bien amusée??

    Cordialement


    Portekoi

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut
    Re,

    Je viens de comprendre : c'est ma demande qui vous a amusé et non mon code...

    J'obtiens une erreur, ligne "6" :

    varchar(max) que j'ai changé en varchar(8000) mais j'ai une autre erreur:

    Serveur*: Msg 197, Niveau 15, État 1, Ligne 32
    Impossible d'utiliser EXECUTE comme source lors de l'insertion dans une variable de table.

    Ce qui correspond à la ligne :

    INSERT INTO @TT EXEC (@SQL)

    Je vais essayer de débugger...

  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
    J'obtiens une erreur, ligne "6" :

    varchar(max) que j'ai changé en varchar(8000) mais j'ai une autre erreur:

    Serveur*: Msg 197, Niveau 15, État 1, Ligne 32
    Impossible d'utiliser EXECUTE comme source lors de l'insertion dans une variable de table.

    Ce qui correspond à la ligne :

    INSERT INTO @TT EXEC (@SQL)
    Vous êtes sous SQL Server 2000 et effectivement, cela ne fonctionne pas (VARCHAR(MAX) + INSERT ... EXEC)

    Peut-être que vous pouvez exécuter sp_spaceused à l'aide de sp_executeSQL en mettant en OUTPUT une variable de type table que vous récupérez dans votre procédure stockée.

    Si cela ne marche pas, utilisez une table temporaire ## (elle est globale à l'instance).
    En effet le USE ne marche pas parce que l'EXEC ne se fait pas dans la même contexte de session que la session qui demande son exécution.

    @++

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Merci pour votre réponse mais je reste avec mon problème

    Comment le résoudre?


    Portekoi

  7. #7
    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
    Essayez ce que je vous propose

    @++

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/08/2013, 15h19
  2. Trigger sur toutes les tables de la bdd
    Par J0r_x dans le forum Développement
    Réponses: 6
    Dernier message: 28/02/2012, 16h32
  3. Rechercher une donnée dans toutes les tables d'une BDD
    Par TheYoMan dans le forum Paradox
    Réponses: 2
    Dernier message: 23/10/2008, 20h24
  4. [MySQL] Liste de toutes les tables d'une bdd
    Par sivine dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/04/2008, 13h48
  5. Suppression de toutes les tables d'une BDD
    Par Lucifron dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/04/2006, 10h52

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