不都是COLLATE Latin1_General_CI_AS   

解决方案 »

  1.   

    哦,Unicode 数据数据
    呵呵
    所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。 
      

  2.   

    SQL Server 2000 对每种排序规则使用两种排序次序,一种用于 Unicode 数据,另一种用于字符代码页。
      

  3.   

    看执行计划就知道啦SELECT * FROM Test WHERE UserID=N'编码' COLLATE Latin1_General_CI_AS   所做的操作是把 UserID 转换成 Nvarchar 再做比较的, 走的是 unicode 的比较, 不走排序你指定的排序规则
    unicode 的优先级高于你指定的排序规则
      

  4.   

    -- 这是联机帮助上的原话在数据类型转换后确定排序规则的优先顺序。产生结果排序规则的操作数可以与提供最终结果数据类型的操作数不同。例如,考察下面的批处理:CREATE TABLE TestTab
       (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 排序规则。