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

Développement SQL Server Discussion :

Conflit de collation


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 19
    Points
    19
    Par défaut Conflit de collation
    Bonjour,

    j'ai un probleme de collation avec le script sql suivant:

    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
     
    USE [loccontrol]
     
    DECLARE @lcCodPai char(60)
     
    -- Get the country code.
    SELECT @lcCodPai=cconvar from tabtvar WHERE cnomvar='GCCODPAI'
     
    USE [sflbaku]
     
    IF @lcCodPai = 'TZA'
    BEGIN
     
    	UPDATE ahotpar set nnumtab2 = 1 where ccodigo in ('IMTPER1', 'IMTPER2', 'IMTPER3', 'EXCPER1', 'EXCPER2', 'EXCPER3')
    END
     
    IF @lcCodPai = 'MDG'
    BEGIN
    	UPDATE ahotpar set nnumtab = 15 where ccodigo = 'IMTRAN3' and cmoneda = '3'
    END
     
    IF @lcCodPai = 'LBR'
    	UPDATE ahotpar set nnumtab = 10000 where ccodigo = 'IMTLIMA' and cmoneda = '2' and cstrtab = 'S'
    END
    BEGIN
    A l'execution, j'ai le message d'erreur suivant dont les lignes indiquées correspondent au 3 tests IF...END

    Msg 468, Level 16, State 9, Line 278

    Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "French_CI_AS" in the equal to operation.

    Msg 468, Level 16, State 9, Line 295

    Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "French_CI_AS" in the equal to operation.

    Msg 468, Level 16, State 9, Line 310

    Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "French_CI_AS" in the equal to operation.
    J'ai alors testé plusieurs code en essayant de modifier la collation par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    USE [sflbaku]
     
    DECLARE @lcCodPai_ char(60)
     
    SET @lcCodPai_ = @lcCodPai COLLATE database_default
    afin d'avoir @lcCodPai_ en Latin1_General_CI_AS au lieu de French_CI_AS mais ca ne change rien, j'ai toujours les erreurs.

    Est ce que quelqu'un aurait une idée svp?

  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,

    Vous utilisez visiblement deux bases de données qui n'ont pas la même collation.

    Pour le savoir, exécutez la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name, collation_name
    FROM sys.databases
    WHERE name IN ('loccontrol', 'sflbaku')
    Vous n'avez pas besoin de changer de contexte de base de données pour effectuer votre requête (et surtout c'est contre-performant ), et cela résoudra en plus votre problème de collation.

    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
    29
    USE [sflbaku]
    GO
    DECLARE @lcCodPai CHAR(60)
     
    -- Get the country code.
    SELECT @lcCodPai = cconvar
    FROM loccontrol.dbo.tabtvar
    WHERE cnomvar='GCCODPAI'
     
    IF @lcCodPai = 'TZA'
    BEGIN 
    	UPDATE dbo.ahotpar
    	SET nnumtab2 = 1
    	WHERE ccodigo IN ('IMTPER1', 'IMTPER2', 'IMTPER3', 'EXCPER1', 'EXCPER2', 'EXCPER3')
    END
     
    IF @lcCodPai = 'MDG'
    BEGIN
    	UPDATE dbo.ahotpar
    	SET nnumtab = 15
    	WHERE ccodigo = 'IMTRAN3' AND cmoneda = '3'
    END
     
    IF @lcCodPai = 'LBR'
    BEGIN
    	UPDATE dbo.ahotpar
    	SET nnumtab = 10000
    	WHERE ccodigo = 'IMTLIMA' AND cmoneda = '2' AND cstrtab = 'S'
    END
    @++

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    merci pour votre aide et l'astuce ;-)

    A+

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

Discussions similaires

  1. Conflit de collations
    Par Jasmine80 dans le forum Requêtes
    Réponses: 10
    Dernier message: 08/01/2009, 14h22
  2. Problème avec COLLATE FR_FR
    Par nico27 dans le forum SQL
    Réponses: 4
    Dernier message: 27/02/2004, 13h20
  3. Générer règles de conflits pour réplication
    Par dupin40 dans le forum Administration
    Réponses: 3
    Dernier message: 01/09/2003, 15h31
  4. [horloge] conflit caractère / timer
    Par JeanJean dans le forum C
    Réponses: 10
    Dernier message: 09/05/2003, 23h47
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

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