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 :

suppression de plusiers tables


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut suppression de plusiers tables
    Bonjour,

    j'ai plein de tables temporaires qui commencent par TMP_ et j'aimerai toutes les supprimer avec un script du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 'DROP TABLE ' + TABLE_NAME
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_NAME LIKE 'tmp_%'
    Celui-là me retourne des lignes comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    drop table tmp_table1
    drop table tmp_table2
    drop table tmp_tablen
    Comment pourrais-je exécuter le résultat retourné par la requête ?

    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    1) Il faut mettre ta requête "SELECT 'DROP TABLE ' + ... " dans un curseur
    2) Tu ouvres ton curseur et stockes le texte composé dans une variable @MonDrop varchar(500)
    3) Tu exécutes le texte contenu dans @MonDrop avec l'instruction EXEC(@MonDrop)
    4) Tu passes à l'enregistrement suivant.

    Si tu as des soucis avec la syntaxe, je te donnerai un coup de main.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonsoir,

    Il n'y a pas besoin de curseurs pour faire cela. Une simple variable sql suffit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DECLARE @sql VARCHAR(MAX)
    SELECT @sql = 'DROP TABLE ' + TABLE_NAME + 'GO '
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_NAME LIKE 'tmp_%';
     
    EXEC(@sql);
    ++

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Bonsoir,

    Il n'y a pas besoin de curseurs pour faire cela. Une simple variable sql suffit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DECLARE @sql VARCHAR(MAX)
    SELECT @sql = 'DROP TABLE ' + TABLE_NAME + 'GO '
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_NAME LIKE 'tmp_%';
     
    EXEC(@sql);
    ++
    @mikedavem : il me semble que ta requête ne supprimera qu'une seule table, à savoir celle de la dernière ligne renvoyée par la requete
    Sur le même principe, je ferai plutôt :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DECLARE @sql VARCHAR(MAX) = ''
    SELECT @sql += 'DROP TABLE ' + TABLE_NAME + '; 
    '
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_NAME LIKE 'tmp_%';
     
     EXEC(@sql);

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    D'ailleurs il faudrait plutôt utiliser INFORMATION_SCHEMA.TABLES à la place de INFORMATION_SCHEMA.COLUMNS

    sinon vous aurez autant d'instructions DROP que de colonnes pour chaque table... :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DECLARE @sql VARCHAR(MAX) = ''
    SELECT @sql += 'DROP TABLE ' + TABLE_NAME + '; 
    '
      FROM INFORMATION_SCHEMA.TABLES
     WHERE TABLE_NAME LIKE 'tmp_%';
     
     EXEC(@sql);

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    @mikedavem : il me semble que ta requête ne supprimera qu'une seule table, à savoir celle de la dernière ligne renvoyée par la requete
    Sur le même principe, je ferai plutôt :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DECLARE @sql VARCHAR(MAX) = ''
    SELECT @sql += 'DROP TABLE ' + TABLE_NAME + '; 
    '
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_NAME LIKE 'tmp_%';
     
     EXEC(@sql);
    Oui effectivement j'ai ete un peu rapide .. merci pour la correction .. il faut bien incrementer la variable a chaque fois .. et interroger la bonne vue de schema

    Avec tout ca chochatown devrait pouvoir supprimer ses tables temporaires

    ++

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut Resolu
    Merciii pour vous,

    exactement ca a bien fonctionner juste j'Ai fait ces deux petites modifications sur des fautes de frappe :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @sql VARCHAR(MAX); 
    SET @sql= '';
     
    SELECT @sql =+ 'DROP TABLE ' + TABLE_NAME + ';'
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_NAME LIKE 'tmp_%';
     
     EXEC(@sql);
    Merci Bien

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

Discussions similaires

  1. [ORACLE8] probleme contrainte sur plusiers tables
    Par yostane dans le forum Oracle
    Réponses: 4
    Dernier message: 23/04/2006, 19h00
  2. Problème de suppression dans une table
    Par Splinter dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 10h55
  3. suppression sur plusieurs tables
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/06/2005, 11h46
  4. [Debutant]Suppression dans des tables avec contraintes
    Par Roming22 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/10/2004, 17h23
  5. Combler les trous lors d'une suppression dans une table
    Par Billybongjoe dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 08/04/2004, 14h02

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