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 :

supprimer à partir d'une ligne connue de la table


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut supprimer à partir d'une ligne connue de la table
    Bonjour,

    J'aimerais savoir est ce qu'il ya une requête T-SQL qui permet de supprimer toutes les lignes qui se trouvent après une ligne précise d'une table.

    En fait j'ai importé un fichier sur une table existante et qui contenait déjà des lignes.
    J'aimerais annuler cet import en supprimant toutes les lignes que j'ai ajoutées.

    Est ce qu'il y a un moyen pour faire ceci ?

    Merci d'avance pour l'aide.

  2. #2
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    bonjour,
    Votre table est un ensemble de valeurs, il n'y a donc pas d'avant ni d'après. Par contre peut être pouvez vous faire la distinction sur une valeur de colonne (par exemple la clé primaire)?

  3. #3
    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,

    Comme vous le suggère Jero44, si votre table comporte des colonnes qui participent à la clé primaire de la table, alors les valeurs de la clé primaire sont valuées et ont probablement progressé de sorte que vous puissiez les retrouver.

    Si tel n'est pas le cas, il vous reste à importer le fichier dans une nouvelle table de même structure, puis à supprimer les données qui sont dans les deux tables.

    Pour copier la structure de la table très rapidement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 0 *
    INTO maTableCible
    FROM dbo.maTableSource
    Vous pouvez ensuite réaliser l'import dans maTableCible.

    Pour supprimer les lignes sont les colonnes ont les mêmes valeurs, il vous suffira d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DELETE FROM dbo.maTableSource
    FROM dbo.maTableSource AS SOURCE
    JOIN maTableCible AS CIBLE
    	ON SOURCE.colonne1 = CIBLE.colonne1
    	AND SOURCE.colonne2 = CIBLE.colonne2
    	AND ...
    	AND SOURCE.colonneN = CIBLE.colonneN
    C'est un peu barbare mais ça a le mérite de fonctionner.

    Pour vous prémunir de ce genre de désagréments à l'avenir, vous pouvez ajouter une colonne de type entier avec le propriété de compteur auto-incrémenté, et relever sa valeur avant l'insertion des nouvelles lignes dans votre table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE maTableSource
    ADD maColonneCompteur INT NOT NULL IDENTITY
    Cette requête ajouter la colonne maColonneCompteur de type INT à la table maTableSource, et le compteur sera incrémenté de 1 à chaque nouvelle ligne.
    Pour pouvez changer la valeur de l'incrément et la valeur de départ à l'aide de la commande DBCC CHECKIDENT.

    Pour relever la valeur courante de l'identité, n'effectuez pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX(maColonneCompteur)
    FROM dbo.maTableSource
    Mais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDENT_CURRENT( 'maTableSource' )
    Cette dernière consulte une table système au lieu d'effectuer le calcul du MAX() sur la table

    Une autre possibilité est d'ajouter une colonne de type DATETIME et de lui adjoindre une contrainte de valeur par défaut à la date système :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE maTableSource
    ADD maColonneHorodatage DATETIME NOT NULL
    CONSTRAINT DF_maTableSource_maColonneHorodatage  DEFAULT (GETDATE())
    Vous saurez ainsi quelles lignes ont été insérées suivant leur date.
    Dans le cas où vous auriez besoin de les supprimer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM dbo.maTableSource
    WHERE maColonneHorodatage  > 'AAAAMMJJ HH:m:ss.mmm'
    @++

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Bonsoir,
    D'abord Merci pour vos réponses.
    Malheureusement je n'avais pas un champ auto-incrément, et les autres champs ne m'aident pas à avoir une requête qui distinguent les lignes ajoutées de celles qui existaient déjà.
    Je vais tester l'idée d'importer le fichier sur une autre table et de faire un delete jointure comme vous l'aviez bien expliqué, logiquement ça doit marcher.
    Merci bcp pour l'aide, je vous tiendrai au courant.

  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
    logiquement ça doit marcher.
    Je vous le garantis, je l'ai encore fait cet après-midi

    Merci bcp pour l'aide, je vous tiendrai au courant.
    Pas de problème, repostez si vous rencontrez des difficultés dans la mise en oeuvre

    @++

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Bonjour,



    Merci encore

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2009, 01h07
  2. creer une clé à partir d'une chaine connue
    Par bertrand.gressier dans le forum Sécurité
    Réponses: 0
    Dernier message: 14/11/2007, 10h58
  3. Créer de nouvelles colonnes à partir d'une ligne
    Par julien4 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/10/2007, 12h33
  4. lancer une mdb a partir d'une ligne de commande
    Par dpie dans le forum Access
    Réponses: 5
    Dernier message: 30/11/2004, 15h01
  5. Effacer le contenu d'un fichier a partir d'une ligne
    Par localhost dans le forum Linux
    Réponses: 3
    Dernier message: 04/04/2004, 04h47

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