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

Langage SQL Discussion :

Vider toutes mes table


Sujet :

Langage SQL

  1. #1
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut Vider toutes mes table
    Bonjour,

    Je cherche un moyen pour vider rapidement et simplement la totalité de mes table.
    Voici le code que j'ai commencé à faire.
    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
    SET NOCOUNT ON
     
    DECLARE @Name NVARCHAR(200), @ObjID NVARCHAR(200)
     
    DECLARE TableList CURSOR FOR
     
    SELECT [name], [object_id] FROM sys.objects WHERE type in (N'U')
     
    OPEN TableList
     
    FETCH TableList INTO @Name, @ObjID
     
    WHILE @@Fetch_Status = 0
     
    BEGIN
    	TRUNCATE TABLE @Name
    	FETCH TableList INTO @Name, @ObjID
     
    END
     
    CLOSE TableList
     
    DEALLOCATE TableList
     
    RETURN
    Je reçois l'erreur
    Msg 102, Level 15, State 1, Line 17
    Incorrect syntax near '@Name'.
    Avez-vous une idée?

    De plus, j'ai l'impression qu'il faudrait aussi que je fasse tomber les contraintes à l'aide des procédures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
    GO
    (...)
    sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? CHECK CONSTRAINT all"
    GO
    Merci de votre aide.

    A+

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Merci de préciser la base de données. Il semble que c'est SQL server.
    Les DDL ne peuvent jamais être écrites directement dans les procédures. Même si elle n'a pas de nom: c'est du Transact-SQL donc le problème est le même.

    Il faut utiliser dans le Transact-SQL EXECUTE() ou EXEC sp_executesql.

    Pour les contraintes il faut passer par sp_fkeys ou sp_foreignkeys pour les rechercher. Ou par une boucle comme ci-dessous:

    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
    DECLARE @NomTable NVARCHAR(200),@REQ_SQL NVARCHAR(500)
     
    DECLARE TableList CURSOR FOR SELECT  o.name nomtable
                                FROM sysobjects o 
                                WHERE o.xtype = 'U' 
     
    OPEN TableList
    FETCH TableList INTO @NomTable
     
    WHILE @@Fetch_Status = 0 
      BEGIN FETCH TableList INTO @NomTable
     
      select @REQ_SQL= 'ALTER TABLE ['+@NomTable+  '] NOCHECK CONSTRAINT ALL'
      print @REQ_SQL
      EXEC (@REQ_SQL)
     
     
    END 
    CLOSE TableList 
     
    DEALLOCATE TableList 
    RETURN
    ou
    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
    DECLARE @NomTable NVARCHAR(200), @NomContrainte VARCHAR(200) ,@REQ_SQL NVARCHAR(500)
     
    DECLARE TableList CURSOR FOR SELECT o.name nomtable, 
                                    so.name nomcontrainte
                                FROM sysobjects o 
                                INNER JOIN  sysforeignkeys sf 
                                  ON o.id = sf.fkeyid 
                                INNER JOIN sysobjects so 
                                 ON  so.id = sf.constid
                                WHERE o.xtype = 'U' 
     
    OPEN TableList
     FETCH TableList INTO @NomTable,     @NomContrainte
     
    WHILE @@Fetch_Status = 0 
    BEGIN FETCH TableList INTO @NomTable,     @NomContrainte
     
      select @REQ_SQL= 'ALTER TABLE ['+@NomTable+  '] NOCHECK CONSTRAINT '+@NomContrainte
      print @REQ_SQL
      EXEC (@REQ_SQL)
     
     
    END 
    CLOSE TableList
    Attention à (extrait)
    Autorisations
    Les autorisations EXECUTE pour une procédure stockée reviennent par défaut au propriétaire de la procédure, qui peut les transmettre à d'autres utilisateurs. Les autorisations d'utilisation de la ou des procédures à l'intérieur de la chaîne EXECUTE sont vérifiées au moment où EXECUTE est rencontré, et ce même si l'instruction EXECUTE est comprise dans une procédure stockée. Lorsqu'une procédure stockée qui exécute une chaîne est lancée, les autorisations sont vérifiées dans le contexte non pas de l'utilisateur qui a créé la procédure, mais de l'utilisateur qui exécute la procédure. Toutefois, si un utilisateur est propriétaire de deux procédures stockées et que la première appelle la seconde, l'autorisation EXECUTE n'est pas vérifiée pour la seconde procédure.
    précision crochet: les crochets autour du nom de la table ne sont pas indispensables, à ne mettre que s'il existe des tables, hors normes, ayant des espaces.

Discussions similaires

  1. [SQL] Créer un identifiant dans toutes mes tables
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/03/2008, 19h36
  2. [SQL] Faire un DROP de toutes mes tables
    Par emmy99 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/03/2008, 14h25
  3. [MySQL] mettre toutes mes tables dans un select
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 14/03/2007, 12h39
  4. Vider toutes les tables
    Par yaya54 dans le forum Access
    Réponses: 2
    Dernier message: 12/04/2006, 18h08
  5. Lister le contenu de toutes mes tables.
    Par Picco dans le forum Oracle
    Réponses: 6
    Dernier message: 07/03/2006, 20h18

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