无法解决equal to操作的排序规则冲突?

在大的公司,每个系统都有相应的DB,而他们排序规则又不相同,造成数据经常发生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)


---------------------------------------------------------------

1、轉成UNICODE
2、SQL2K可用COLLATE子句指定相同的排序規則.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值