当我发出SQL查询时,有时会收到以下错误消息:
无法在等于操作的情况下解决“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。
我经常解决这个问题只是使两个表校对相同。所以我需要知道有没有快速解决这个问题的方法。
如果对于sql查询中的两个表的排序规则不相同,我想在我的SQL查询中添加特殊的 ,那么查询将完美地运行而没有任何错误。有什么解决方案吗?
答案 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)
两个服务器都可能使用不同的Collations。如果是,那么你会得到一个类似于我在本主题顶部提到的错误。在这种情况下你应该做什么?
您可以更改任一表格列/字段的默认排序规则,但这可能会对当前与更改的表格一起使用的其他表格产生连锁反应。
匹配列/字段时使用COLLATE DATABASE_DEFAULT关键字
像:
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