载入中
自定义HTML载入中... loading
sql server解决equal to操作的排序规则冲突问题 [转贴 2008-05-07 23:40:42]  删除... 
字体变小 字体变大

sql server数据库的级联查询、存储过程和视图有时会发生无法解决equal to操作的排序规则冲突(Cannot resolve collation conflict for equal to operation.)的错误。

那是因为你的表达式所引用的两个操作数表达式的排序规则不同。

如果复杂表达式所引用的两个操作数表达式的排序规则不同,则该复杂表达式最终结果的排序规则标志基于下列规则:

显式优先于隐性。隐性优先于强制默认。换言之,
显式 > 隐性 > 强制默认

组合两个已指派给不同排序规则的显式表达式将生成错误。
显式 X + 显式 Y = 错误

组合两个具有不同排序规则的隐性表达式将产生无排序规则。
隐性 X + 隐性 Y = 无排序规则

将无排序规则的表达式与任何标志的表达式组合,除了显式排序规则外(参见下一项),都产生无排序规则标志的结果。
无排序规则 + 任何标志 = 无排序规则

将无排序规则的表达式与显式排序规则的表达式组合将产生具有显式标志的表达式。
无排序规则 + 显式 X = 显式

下面的示例说明上述规则。

USE tempdb
GO

CREATE TABLE TestTab (
    id int,
    GreekCol nvarchar(10) collate greek_ci_as,
    LatinCol nvarchar(10) collate latin1_general_cs_as
    )
INSERT TestTab VALUES (1, N'A', N'a')
GO

下面查询中的谓词具有排序规则冲突,因此产生错误:

SELECT *
FROM TestTab
WHERE GreekCol = LatinCol

下面是结果集。

Msg 446, Level 16, State 9, Server CTSSERV, Line 1
Cannot resolve collation conflict for equal to operation.

下面查询中的谓词在排序规则 greek_ci_as 中取值,因为右边表达式具有显式标志,优先于右边表达式的隐性标志:

SELECT *
FROM TestTab
WHERE GreekCol = LatinCol COLLATE greek_ci_as

下面是结果集。

id           GreekCol              LatinCol
----------- -------------------- --------------------
            1 a                     A

(1 row affected)

分类: IT 技术
所属版块: 科技
票数:
什么是“我顶”?
点击数:    评论数:
本文章引用通告地址(TrackBack Ping URL)为:
本文章尚未被引用。
发表评论
大 名:
(不填写则显示为匿名者)
网 址:
(您的网址,可以不填)
标 题:
内 容:
请根据下图中的字符输入验证码:
(您的评论将有可能审核后才能发表)
和讯个人门户 v1.0 | 和讯部落 | 客服中心