sql-server – 如何摆脱SQL Server查询中的排序规则冲突?

我正在处理一个视图,其中我正在使用两个不同服务器的两个表的内部连接。我们正在使用链接服务器。运行查询时,我收到以下消息:

Cannot resolve the collation conflict between “SQL_Latin1_General_CP1_CI_AS” and “Arabic_CI_AS” in the equal to operation.

我不太了解整理。通过互联网搜索我找到使用COLLATE的解决方案,但COLLATE的概念对我来说不清楚。它会改变任何数据库的任何东西吗?我正在寻找一个解决方案,而不改变任何数据库。

欢迎任何有关这些概念的良好学习资料。

您可以通过强制查询中使用的排序规则作为特定排序规则来解决问题,例如。 SQL_Latin1_General_CP1_CI_AS或DATABASE_DEFAULT。例如:

SELECT MyColumn
FROM FirstTable a
INNER JOIN SecondTable b
ON a.MyID COLLATE SQL_Latin1_General_CP1_CI_AS = 
b.YourID COLLATE SQL_Latin1_General_CP1_CI_AS

在上述查询中,a.MyID和b.YourID将是具有基于文本的数据类型的列。使用COLLATE将强制查询忽略数据库上的默认排序规则,而是使用提供的归类,在这种情况下为SQL_Latin1_General_CP1_CI_AS。

基本上这里发生的是每个数据库都有自己的排序规则,“为数据提供排序规则,大小写和重音灵敏度属性”(从http://technet.microsoft.com/en-us/library/ms143726.aspx),并适用于具有文本数据类型的列,例如。 VARCHAR,CHAR,NVARCHAR等。当两个数据库具有不同的排序规则时,您无法将文本列与运算符(等于(=))进行比较,而无需解决两个不同的排序规则之间的冲突。

http://stackoverflow.com/questions/20544392/how-to-get-rid-of-collation-conflict-in-a-sql-server-query

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql-server – 如何摆脱SQL Server查询中的排序规则冲突?