2

tempdb 的排序规则是Latin1_General_100_CI_AI. 数据库的排序规则也是Latin1_General_100_CI_AI。然而下面的 SQL 语句:

SELECT *
FROM ##CitiesMapping AS cm
INNER JOIN Cities ON cm.CityName=Cities.Name

返回:

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_100_CI_AI" in the equal to operation.

服务器默认排序规则也是Latin1_General_100_CI_AI

4

2 回答 2

3

可能为单个列设置了不同的排序规则。来自 Stuart 的查询将向您展示这一点。如果它们是不同的排序规则,您可以指定在比较的任一侧使用的排序规则,如下所示:

SELECT *
  FROM ##CitiesMapping AS cm
 INNER JOIN Cities 
    ON cm.CityName COLLATE DATABASE_DEFAULT = Cities.Name COLLATE DATABASE_DEFAULT;

我希望这能够帮到你。

于 2013-07-21T17:13:51.440 回答
2

检查所涉及的表格:

SELECT name, collation_name, OBJECT_NAME(object_id)
FROM sys.columns 
WHERE OBJECT_NAME(object_id) IN ('Cities')
于 2013-07-21T14:13:36.703 回答