Достижение согласованной сортировки между С# и SQL с помощью CollationInfo.Comparer

Я пытаюсь использовать CollationInfo.Comparer из SMO, чтобы мой код С# сортировался как 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

Возвращает Tri-Valley раньше Trimble.

Сопоставление сравнивает вещи просто неправильно, или я делаю что-то не так?


person Eric Gurney    schedule 19.07.2012    source источник
comment
Просто в качестве проверки работоспособности, если вы измените сортировку SQL на ORDER BY Name COLLATE SQL_Latin1_General_CP1_CS_AS, будет ли она по-прежнему сортироваться в том же порядке?   -  person Simon MᶜKenzie    schedule 20.07.2012
comment
Это дает тот же результат.   -  person Eric Gurney    schedule 09.07.2013


Ответы (1)


Устаревшая сортировка сортировки «SQL» не согласована с алгоритмом «словной сортировки» Windows. Вам нужно будет использовать сопоставление Windows (например, Latin1_General_CS_AS) для столбцов в базе данных, чтобы получить такое же поведение.

person Dan Guzman    schedule 20.07.2014