排序规则冲突sql server

时间:2011-12-16 12:26:14

标签: sql sql-server

当我发出SQL查询时,有时会收到以下错误消息:

  

无法在等于操作的情况下解决“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。

我经常解决这个问题只是使两个表校对相同。所以我需要知道有没有快速解决这个问题的方法。

如果对于sql查询中的两个表的排序规则不相同,我想在我的SQL查询中添加特殊的 ,那么查询将完美地运行而没有任何错误。有什么解决方案吗?

3 个答案:

答案 0 :(得分:13)

您可以使用COLLATE子句强制进行哪种排序规则。

SELECT *
FROM Table1 T1
INNER JOIN Server2.dbo.Table2 T2
ON T1.Name = T2.Name COLLATE database_default

在两个数据库或服务器之间连接表时,通常会出现排序规则冲突,尤其是在数据库版本不同的情况下。

答案 1 :(得分:2)

您可以使用collate clause

在查询中指定排序规则
where  col1 = col2 collate Latin1_General_CI_AS

答案 2 :(得分:0)

两个服务器都可能使用不同的Collat​​ions。如果是,那么你会得到一个类似于我在本主题顶部提到的错误。在这种情况下你应该做什么?

  1. 您可以更改任一表格列/字段的默认排序规则,但这可能会对当前与更改的表格一起使用的其他表格产生连锁反应。

  2. 匹配列/字段时使用COLLATE DATABASE_DEFAULT关键字

  3. 像:

    SELECT T1.EmployeeName, T2.DeptName
    FROM ServerA.dbo.EmpTab T1
    JOIN ServerB.dbo.DeptTab T2
    ON T1.DeptCode COLLATE DATABASE_DEFAULT
    = T2.DeptCode COLLATE DATABASE_DEFAULT