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 résoudre le classement en conflit de l'opérati


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 20
    Par défaut Impossible de résoudre le classement en conflit de l'opérati
    Bonjour j'ai la requete suivante :

    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
      -- s'il y a des records en trop, on les retire
     
        DELETE ZoneGeographiqueRecherche
          WHERE zgr_cuv_Id = @cuv_Id
          AND   zgr_zog_Code NOT IN ( SELECT UneZone FROM #Zones )
     
      -- s'il manque des enregistrements, on les cree
     
        INSERT INTO ZoneGeographiqueRecherche(zgr_cuv_Id, zgr_zog_Code)
          SELECT @cuv_Id, UneZone 
            FROM #Zones
            WHERE UneZone NOT IN (
              SELECT zgr_zog_Code 
                FROM ZoneGeographiqueRecherche
                WHERE zgr_cuv_Id = @cuv_Id )
    Lorsque je l'execute sur Microsoft SQL server, ca me donne l'erreur suivante :

    Impossible de résoudre le classement en conflit de l'opération equal to.

    J ai lu sur des forums que c'etait un probleme de jointure et qu'il faut utiliser COLLATE mais je n'arrive pas a comprendre comment.
    Merci de votre aide.

    Julien[/code][/quote]

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Par défaut
    Salut
    Je te conseille de lire cet excellent article à ce sujet :
    http://sqlpro.developpez.com/cours/s...er/collations/

    Pour répondre à ta question :
    Ton problème doit venir de cet égalité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    zgr_cuv_Id = @cuv_Id
    Ces champs doivent être de type nvarchar et ne pas avoir la même collation.C'est à dire qu'ils ont le même type mais leur représentation binaire est différente.

    Je te conseille donc d'homogéniser les collations.
    Le mieux est de le faire au niveau de la base
    mais tu peux travailler au niveau du champ.

    Pour cela, tu ouvres une table posant problème en modification et tu te positionnes su le champ de format nvarchar et tu regarde sa propriété collation(dernière ligne) et tu la compares à celle de l'autre champ qui pose problème.
    Normalement les collations devraient etre différentes.
    A toi de les modifier afin qu'elles soient identiques.


    Slt
    Chris

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Bonjour,

    essaie avec le collate comme suit

    -- s'il y a des records en trop, on les retire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE ZoneGeographiqueRecherche
          WHERE zgr_cuv_Id = @cuv_Id
          AND   zgr_zog_Code NOT IN ( SELECT UneZone collate French_CI_AS FROM #Zones )
    -- s'il manque des enregistrements, on les crée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     INSERT INTO ZoneGeographiqueRecherche(zgr_cuv_Id, zgr_zog_Code)
          SELECT @cuv_Id, UneZone 
            FROM #Zones
            WHERE UneZone NOT IN (
              SELECT zgr_zog_Code collate French_CI_AS
                FROM ZoneGeographiqueRecherche
                WHERE zgr_cuv_Id = @cuv_Id )

  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 : 44
    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
    Par défaut
    Bonjour,

    Le problème vient de la table temporaire, c'est à dire que la collation avec laquelle vous avez installé SQL Server, n'est pas la même que celle de votre base de données ou de votre colonne.

    En effet, toute table, temporaire ou variable de type table, est stockée dans la base de données système TempDB.

    Pour résoudre votre problème, il vous faut donc utiliser COLLATE database_default, soit à la création de la table temporaire, soit dans le prédicat de jointure.

    Le type nvarchar n'a rien à voir dans cette erreur : en nvarchar on stocke sur 2 octets par caractère parce qu'on utilise Unicode, qui permet de stocker n'importe quel caractère de n'importe quel alphabet, et les chiffres.
    En varchar, on stocke en ASCII, donc on ne peut stocker que les caractères de l'alphabet latin et les chiffres, mais on ne consomme qu'un seul octet par caractère.
    Dans les deux cas, il faut ajouter 2 octets par chaîne de caractère, qui indiquent l'offset de fin de la chaîne dans la page qui stocke les données de la table.

    @++

Discussions similaires

  1. Réponses: 7
    Dernier message: 31/07/2009, 11h53
  2. Réponses: 3
    Dernier message: 23/03/2009, 17h11
  3. (eclipse 3.4,macosX) Impossible de résoudre une unité de persistance
    Par olivier57b dans le forum Glassfish et Payara
    Réponses: 6
    Dernier message: 07/01/2009, 14h34
  4. [JSTL] impossible de résoudre org.apache.taglibs
    Par libuma dans le forum Taglibs
    Réponses: 4
    Dernier message: 13/12/2008, 21h23

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