使用Collat​​ionInfo.Comparer在c#和SQL之间实现一致的排序

时间:2012-07-19 13:33:40

标签: c# sql-server sorting collation smo

我正在尝试使用SMO中的Collat​​ionInfo.Comparer来获取与SQL Server类似的c#代码。我得到了正确的整理,但我的项目仍然没有正确排序。

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。

整理比较的东西是不能正常工作,还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

传统的“SQL”排序规则排序与Windows“word-sort”算法不一致。您需要对数据库中的列使用Windows排序规则(例如Latin1_General_CS_AS)来获得相同的行为。