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 :

probleme delete - sql server 2008


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut probleme delete - sql server 2008
    Bonjour,

    j'ai une table A ayant l'identifiant id1
    et une table B ayant l'identifiant id2
    et une table C ayant l'identifiant id3

    je veux faire un delete de la table A après une jointure entre les 3 tables.

    autrement dit, la requete que j'ai excuté (sous SQL Server 2008) est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete from A
    where (select * from A, B, C where A.id1 = B.id2  and  B.id2 = C.id3)
    mais malheureusement ça fonctionne pas...

    une idée?!!

    merci d'avance

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 227
    Points : 28 226
    Points
    28 226
    Par défaut
    Where quoi ???

    Ta clause Where ne veut rien dire.

    Peut-être comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete from A
    where id1 IN (select A.id1 from A, B, C where A.id1 = B.id2  and  B.id2 = C.id3)

    Attention, ça ne supprimera que les enregistrements de la table A, pas ceux de la table B ni C

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut
    @sevyc64

    j'avai essayé presque la meme requete que t'as proposé mais plutot avec * au lieu de A.id1 dans le select, càd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete from A
    where id1 IN (select * from A, B, C where A.id1 = B.id2  and  B.id2 = C.id3)
    mais ca na pas fonctionné!!

  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 : 43
    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,

    C'est normal puisque l'étoile vous retourne toutes les colonnes de toutes les tables A, B et C.
    En plus de cela le SELECT est écrit à la façon d'un temps qui est antérieur à ma naissance ... je ne suis pas encore très vieux, mais bon ...

    On aurait donc écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DELETE        FROM dbo.A
    FROM        dbo.A AS A
    INNER JOIN    dbo.B AS B ON A.id1 = B.id2
    INNER JOIN    dbo.C AS C ON B.id2 = C.id3
    Il est important de préfixer le nom des objets que l'on manipule (table, vue, procédure stockée, fonction) par le nom du schéma auquel ils appartiennent.
    Cela évite à SQL Server d'interroger les tables de métadonnées pour comparer le schéma de l'objet avec son propriétaire ...

    @++

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 227
    Points : 28 226
    Points
    28 226
    Par défaut
    mais plutot avec * au lieu de A.id1 dans le select, càd :
    ...
    mais ca na pas fonctionné!!
    C'est pour ça que j'avais A.id1 car avec l'étoile ça ne peut pas fonctionner.



    En plus de cela le SELECT est écrit à la façon d'un temps qui est antérieur à ma naissance ...
    Non, il est écrit tel qu'il est appris dans les écoles d'informatique, c'est à dire très mal

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut
    re bonjour,

    merci ca marche bien avec le A.id1 au lieu de * dans le select...

    sinon merci pour vos compliments, l'ecole est l'univ de Lyon

  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 : 43
    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
    Pensez plutôt à écrire les requêtes comme je vous l'ai indiqué : vous y gagnerez en temps et peut-être même en performances

    Au sujet de l'école, je suis bien d'avis que ce n'est pas la seule.

    @++

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Points : 79
    Points
    79
    Par défaut
    [QUOTE=laure07;5535151]re bonjour,

    merci ca marche bien avec le A.id1 au lieu de * dans le select...

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

Discussions similaires

  1. [2008] Probleme Delete sq server 2008
    Par karimot dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/01/2014, 12h26
  2. [2008] Probleme RAISERROR sql server 2008
    Par karimot dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 23/12/2013, 07h52
  3. Probleme de Connexion SQL server 2008 & VB 2008
    Par kashomi dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/11/2008, 09h31
  4. PROBLEME D'INSTALLATION DE SQL SERVER 2008
    Par mayce dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/06/2008, 12h55

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