web-dev-qa-db-fra.com

Erreur SQL Server "Conversion implicite de car le classement de la valeur n'est pas résolu en raison d'un conflit de classement."

J'obtiens cette erreur lors du développement de la procédure stockée

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.

déclaration est comme ça

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

mais si le faire, cela 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 en train de le modifier, je ne sais pas pourquoi il a ajouté COLLATE DATABASE_DEFAULT mais si je le supprime, il donne également 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.

26
Azhar

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 en avoir besoin sur chaque chaîne si vous l'obtenez en un seul 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 se produit car le classement de vos colonnes est probablement différent du classement de votre base de données. Ainsi, "City" a un classement mais les constantes de chaîne en ont un autre.

52
gbn

ALTER TABLE DEPT1 et DEPT2 afin que les définitions de tables résultantes ne contiennent aucun COLLATE