【问题标题】:Achieving consistent sorting between c# and SQL using CollationInfo.Comparer使用 Collat​​ionInfo.Comparer 在 c# 和 SQL 之间实现一致的排序
【发布时间】:2012-07-18 17:00:22
【问题描述】:

我正在尝试使用 SMO 的 Collat​​ionInfo.Comparer 来让我的 c# 代码像 SQL Server 一样排序。我得到了正确的排序规则,但我的项目仍然没有正确排序。

var collationInfo = CollationInfo.Collations.Single(x => x.Name == "SQL_Latin1_General_CP1_CS_AS") as CollationInfo;
var comparer = collationInfo.Comparer;

int c = comparer.Compare("Tri-Valley L", "Trimble L");

在这种情况下,c 返回“1”,表示 Tri-Valley L 将出现在 Trimble 之后。

但是这段代码在 SQL Server 中

DECLARE @T TABLE
(
    Name VARCHAR(20)
)

INSERT INTO @T
(
    Name
)
VALUES('Tri-Valley L'),
    ('Trimble L')

SELECT
Name
FROM
@T
ORDER BY Name

在 Trimble 之前返回 Tri-Valley。

排序规则比较的东西是不是不能正常工作,还是我做错了什么?

【问题讨论】:

  • 作为健全性检查,如果您将 SQL 排序更改为 ORDER BY Name COLLATE SQL_Latin1_General_CP1_CS_AS,它是否仍以相同的顺序排序?
  • 它给出了相同的结果。

标签: c# sql-server sorting collation smo


【解决方案1】:

旧的“SQL”归类排序与 Windows“字排序”算法不一致。您需要对数据库中的列使用 Windows 排序规则(例如 Latin1_General_CS_AS)以获得相同的行为。

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多