排序规则优先级问题 不都是COLLATE Latin1_General_CI_AS 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哦,Unicode 数据数据呵呵所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。 SQL Server 2000 对每种排序规则使用两种排序次序,一种用于 Unicode 数据,另一种用于字符代码页。 看执行计划就知道啦SELECT * FROM Test WHERE UserID=N'编码' COLLATE Latin1_General_CI_AS 所做的操作是把 UserID 转换成 Nvarchar 再做比较的, 走的是 unicode 的比较, 不走排序你指定的排序规则unicode 的优先级高于你指定的排序规则 -- 这是联机帮助上的原话在数据类型转换后确定排序规则的优先顺序。产生结果排序规则的操作数可以与提供最终结果数据类型的操作数不同。例如,考察下面的批处理:CREATE TABLE TestTab (PrimaryKey int PRIMARY KEY, CharCol char(10) COLLATE French_CI_AS )SELECT *FROM TestTabWHERE CharCol LIKE N'abc'简单表达式 N'abc' 的 Unicode 数据类型具有较高的数据类型优先顺序,所以结果表达式将 Unicode 数据类型指派给 N'abc'。然而,表达式 CharCol 具有隐性排序规则标志,而 N'abc' 具有较低的强制默认排序规则标志,所以使用的排序规则是 CharCol 的 French_CI_AS 排序规则。 sql server 2000 个别数据库不能访问 无级分类,如何用储存过程返回当前ID下面的所有ID子集? 请问:关于读数据库中数据为乱码的问题?在线等,谢谢 微软的Duwamish例子中的数据表问题 怎么改写下列语句? 删除临时表怎么写 [邮件,储存过程]高手们看看是否有问题,低手免入 日期统计的问题 复杂SQL查询问题 如何枚举所有SQL Server服务器 怎么用select语句显示表中3到20条数据? sql 中的存储过程如何接空值参数哦...
呵呵
所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。
unicode 的优先级高于你指定的排序规则
(PrimaryKey int PRIMARY KEY,
CharCol char(10) COLLATE French_CI_AS
)SELECT *
FROM TestTab
WHERE CharCol LIKE N'abc'简单表达式 N'abc' 的 Unicode 数据类型具有较高的数据类型优先顺序,所以结果表达式将 Unicode 数据类型指派给 N'abc'。然而,表达式 CharCol 具有隐性排序规则标志,而 N'abc' 具有较低的强制默认排序规则标志,所以使用的排序规则是 CharCol 的 French_CI_AS 排序规则。