SQL Server错误"隐式转换,因为由于排序规则冲突,值的排序规则未解决".

Azh*_*har 27 sql t-sql sql-server-2005

我在开发存储过程时遇到此错误

无法执行varchar值到varchar的隐式转换,因为由于排序规则冲突而无法解析值的排序规则.

声明是这样的

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1
UNION ALL
Select '' AS Place, 'Arizona' As State, Country FROM DEPT2
Run Code Online (Sandbox Code Playgroud)

但如果如果这样做,它也会给出同样的错误

 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
Run Code Online (Sandbox Code Playgroud)

实际上这个代码是由其他人编写的,我只是编辑代码,不知道为什么他添加了COLLATE DATABASE_DEFAULT但是如果我删除它也会给出相同的错误

无法执行varchar值到varchar的隐式转换,因为由于排序规则冲突而无法解析值的排序规则.

gbn*_*gbn 52

你最有可能在两个地方都需要COLLATE.

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
Run Code Online (Sandbox Code Playgroud)

编辑:如果你在一个地方得到它,你可能需要在每个字符串上

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
Run Code Online (Sandbox Code Playgroud)

EDIT2:

这是因为您的列排序规则可能与您的数据库排序规则不同.所以"City"有一个排序规则,但字符串常量有另一个排序规则.