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 :

Impossible de supprimer les données avec Truncate table


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut Impossible de supprimer les données avec Truncate table
    Salut,
    je souhaite effacer les données de certaines tables de ma base, mais impossible de faire un truncate table dessus, à cause de l'erreur suivante
    Msg*4712, Niveau*16, État*1, Ligne*14
    Impossible de tronquer la table expedition parce qu'elle est actuellement référencée par une contrainte FOREIGN KEY.


    Donc après quelques recherches sur google, j'ai lu que ceci pourrait être contourné en faisant un alter table. J'ai donc trouvé et adapté un code qui enlève toutes les contraintes de toutes les tables de la base.

    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
     
    --declare a variable that would hold the query to be executed
    DECLARE @AlterQuery varchar(4000)
     
    -- create a cursor that would hold our truncate statements
    DECLARE AlterQuerries CURSOR LOCAL FAST_FORWARD
    FOR SELECT 'ALTER TABLE ' + CONSTRAINT_SCHEMA + '.' + TABLE_NAME + ' NOCHECK CONSTRAINT ' + 
    		 + CONSTRAINT_NAME 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_TYPE='FOREIGN KEY'
     
    -- read our truncate statements
    OPEN AlterQuerries
    -- loop thru each statement in our truncate statement cursor
    FETCH NEXT FROM AlterQuerries INTO @AlterQuery
    WHILE @@FETCH_STATUS = 0
    BEGIN
        --execute the statement
        EXEC(@AlterQuery)
    Print(@alterquery)
        --assign the current truncate statement to our @TruncateStatement variable
        FETCH NEXT FROM AlterQuerries INTO @AlterQuery 
     
    END
    -- close our cursor
    CLOSE AlterQuerries
    -- and free up the resources
    DEALLOCATE AlterQuerries
    Donc je m'attendais à pouvoir truncate mes tables en toute tranquillité mais j'ai toujours le même problème.
    Pouvez vous me confirmer qu'enlever les contraintes sur les tables permet de les tronquer ?

  2. #2
    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
    Bonjour,

    Supprimer les contraintes de clé étrangères est une partie du travail.
    En effet certaines contraintes CHECK peuvent vous empêcher de supprimer des données.

    S'il s'agit d'un besoin ponctuel, vous pouvez tout simplement avec Management Studio scripter tous les objets de la base de données en question en cliquant droit sur la base de données en question, puis
    - tâches
    - générér des scripts ...
    - dans l'assistant, cocher "générer un script pour tous les objets dans la base de données sélectionnée".

    S'il s'agit d'un besoin régulier, regardez par ici et ici

    @++

  3. #3
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    J'ai oublié de préciser que je souhaite garder les données de certaines tables.
    Creer des scripts pour la base me permettrait de garder ces données ?

  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 : 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
    Non, il vous permet d'obtenir le DDL des objets, c'est à dire :
    - pour les tables ou les vues : leur structure
    - pour les procédures stockées, les triggers, et les fonctions : leur code

    Pour faire ce que vous souhaitez, je crois que le mieux est d'effectuer une sauvegarde complète de la base de données, afin de conserver l'intégrité et la consistance de vos données.
    Vous devrez par la suite restaurer celle-ci sur la même instance SQL Server, puis repeupler vos tables à partir de cette sauvegarde.
    Quand vous aurez terminé, il vous suffira de supprimer le base de données restaurée.

    @++

Discussions similaires

  1. Supprimer les données d'une table
    Par benlakhel dans le forum Développement de jobs
    Réponses: 23
    Dernier message: 18/12/2015, 11h55
  2. supprimer les données d'1 table avec Adoquery
    Par nn2009 dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/10/2011, 14h52
  3. impossible d'jouter les données dans une table access
    Par esisa1 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 22/06/2010, 10h40
  4. Réponses: 14
    Dernier message: 29/11/2007, 07h47
  5. supprimer les données de de table différentes
    Par argon dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/01/2006, 21h58

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