2010-10-05 2 views
23

J'obtiens cette erreur tout en développant la procédure stockéeErreur SQL Server "Conversion implicite de parce que le classement de la valeur n'est pas résolu en raison d'un conflit de classement."

conversion implicite de la valeur varchar à varchar ne peut pas être effectuée car le classement de la valeur est en suspens en raison d'un conflit de classement.

déclaration

est comme ce

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' AS Place, 'Arizona' As State, Country FROM DEPT2 

mais si Si ce faire, il donne également la même erreur

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2 

En fait, ce code est écrit par quelqu'un d'autre et je suis simplement éditer le code, Je ne sais pas pourquoi il a ajouté COLLATE DATABASE_DEFAULT mais si je l'enlève donne aussi la même erreur

La conversion implicite de la valeur varchar en varchar ne peut pas être effectuée car le classement de la valeur n'est pas résolu en raison d'un conflit de classement.

Répondre

46

Vous auriez probablement besoin de COLLATE aux deux endroits.

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2 

Edit: Vous pouvez avoir besoin sur chaque chaîne si vous obtenez dans un endroit

Select 
    City COLLATE DATABASE_DEFAULT AS Place, 
    State COLLATE DATABASE_DEFAULT AS State, 
    Country COLLATE DATABASE_DEFAULT AS Country 
FROM DEPT1 
UNION ALL 
Select 
    '' COLLATE DATABASE_DEFAULT, 
    'Arizona' COLLATE DATABASE_DEFAULT , 
    Country COLLATE DATABASE_DEFAULT 
FROM DEPT2 

Edit2:

Cela arrive parce que votre collation de colonne est probablement différente de votre collation de base de données. Donc "Ville" a une collation mais les constantes de chaîne en ont une autre.

+0

oui ... mais il donne aussi la même erreur – Azhar

+1

Comment puis-je supprimer ce DATABASE_DEFAULT COLLATE du tout de ma déclaration ... pourquoi est-ce qu'il est obligatoire d'utiliser cela ... En fait, il y a 45 colonnes dans une déclaration et à propos de l'union de 6 déclarations et plus de la moitié sont des chaînes ... – Azhar

+0

Ce fut un bon conseil pour moi, quand je faisais le choix de quelques tables SYS (ou vues) pour savoir ce que permission-accorde à tous mes server-logins (principaux) ont été donnés. – NateJ

1

ALTER TABLE DEPT1 et DEPT2 de telle sorte que les définitions résultant des tableaux ne contiennent aucune COLLATE

Questions connexes