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 :

[SQL Server CE] DELETE avec jointure


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 120
    Par défaut [SQL Server CE] DELETE avec jointure
    Bonjour,

    SQL Server Compact Edition ne supporte-t-il pas les puissants DELETE avec jointures, que supportait pourtant très bien le Transact-SQL de Sybase, dont est issu le Transact-SQL de SQL Server???

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE Souscription FROM Souscription s, Offre o WHERE s.Offre_Id = o.Offre_Id AND Offre_Name = 'test'
    Ceci plante royalement...

    Merci pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    bonjour,

    quel est votre message d'erreur ?

    merci

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 120
    Par défaut
    Voici le message d'erreur :

    There was an error parsing the query. [ Token line number = 1,Token line offset = 15,Token in error = FROM ]
    La requête était celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE Assuré FROM Assuré a, Souscription s, Offre o WHERE a.Souscription_Id = s.Souscription_Id AND s.Offre_Id = o.Offre_Id AND Offre_Name = 'toto'

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    j'ai pas sql serveur sous la main mais il me semble que l'on a pas besoin de répéter la table primaire et qu'il ne faut pas caster le nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE Assuré FROM  Souscription s, Offre o 
    WHERE Assuré.Souscription_Id = s.Souscription_Id AND s.Offre_Id = o.Offre_Id AND Offre_Name = 'toto'
    sous réserve

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    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
     
    DECLARE @T_ASSURES TABLE (S_ID INT, S_NAME VARCHAR(100), O_ID INT)
    DECLARE @T_OFFRES TABLE (O_ID INT, O_NAME VARCHAR(100))
     
    INSERT INTO @T_ASSURES SELECT 1, 'Bob', 1
    INSERT INTO @T_ASSURES SELECT 2, 'Lucy', 1
    INSERT INTO @T_ASSURES SELECT 3, 'Mark', 2
    INSERT INTO @T_ASSURES SELECT 4, 'Mary', 3
     
    INSERT INTO @T_OFFRES SELECT 1, 'Noel'
    INSERT INTO @T_OFFRES SELECT 2, 'St-Valentin'
    INSERT INTO @T_OFFRES SELECT 3, 'Printemps'
     
    SELECT * FROM @T_ASSURES
     
    DELETE @T_ASSURES
    FROM @T_ASSURES T1
    JOIN @T_OFFRES T2 ON T1.O_ID = T2.O_ID
    WHERE T2.O_NAME = 'Noel'
     
    SELECT * FROM @T_ASSURES
     
    --DELETE Assuré 
    --FROM  Souscription s, Offre o 
    --WHERE Assuré.Souscription_Id = s.Souscription_Id AND s.Offre_Id = o.Offre_Id AND Offre_Name = 'toto'

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 120
    Par défaut
    Serge0934 et Babyneedle,

    Merci pour vos réponses, mais les deux requêtes que vous me proposez plantent.

    Peut-être que la version COMPACT EDITION de SQL Server ne supporte pas cette syntaxe?

    Je m'en suis sorti en faisant "à la Oracle", mais c'est moins joli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM Assuré WHERE Souscription_Id IN (SELECT Souscription_Id FROM Souscription WHERE Offre_Id IN (SELECT Offre_Id FROM Offre WHERE Offre_Name = 'toto'))

Discussions similaires

  1. [SQL Server 2005] Delete avec conditions
    Par dkmix dans le forum Développement
    Réponses: 6
    Dernier message: 24/01/2011, 17h36
  2. [SQL SERVER 2000] UPDATE avec jointure
    Par Jsh dans le forum Développement
    Réponses: 2
    Dernier message: 23/01/2009, 10h08
  3. [SQL] DELETE avec jointures
    Par eagleleader dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 12/10/2007, 09h37
  4. [SQL server 2000] Problème de jointure avec 'Case'
    Par Tankian dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 17h42
  5. [SQL Server 2000] Delete et alias
    Par Sebounet19 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 31/07/2005, 14h17

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