하나 이상의 SQL Server 2000 데이터베이스에서 하나의 정렬 된 스트림으로 들어오는 두 개의 정렬 된 스트림 스트림을 C#에서 일부 메모리 병합해야합니다. 이러한 데이터 스트림은 거대 할 수 있으므로 두 스트림을 메모리로 가져 오지는 않습니다. 대신 메모리의 각 스트림에서 한 번에 하나의 항목을 유지하고 각 단계에서 각 스트림의 현재 항목을 비교하고 최소 스트림을 최종 스트림으로 밀어 넣은 다음 적절한 소스 스트림에서 다음 항목을 가져와야합니다. 그러나 올바르게 수행하려면 메모리 내 비교가 데이터베이스의 데이터 정렬과 일치해야합니다 (스트림 [A,B,C]
및 [A,B,C]
을 고려하십시오. 올바른 병합 시퀀스는 [A,A,B,B,C,C]
이지만 인 메모리 비교는 C < B
으로 생각하면 메모리 내 병합 그것은 B
과 C
보고됩니다 점하는 A,A,B
을 얻을 것이며, 잘못 분류 스트림의 결과로, C
를 얻을 것입니다)SQL Server 2000의 VARCHAR 데이터 정렬 대 VARBINARY 정렬 순서
그래서, 내 질문은 것은 :. 중 하나를 모방 할 수있는 방법이있다 SQL Server 2000에서 System.StringComparison
enum을 C#으로 사용하거나 그 반대의 경우에도 데이터 정렬은 어떻게됩니까? 가장 가까운 것은 System.StringCompaison.Ordinal
을 사용하여 VARBINARY
표준으로 변환 된 VARBINARY
으로 변환 된 데이터베이스 문자열의 결과를 사용하는 것입니다. 다만, "order by name collate X"
절을 추가 할 것입니다. 여기서 X는 몇 가지 데이터 정렬입니다. VARBINARY
과 똑같은 방식으로 작동합니다. 데이터베이스에서 나가고 메모리에 들어올 때 문자열로 돌아갈 때 모든 문자열을 VARBINARY
으로 변환하는 것이 아닙니다.
을 참조하십시오. _BIN이 SQL Server 2000에 적용됩니까? –
Latin1_General_BIN과 Latin1_General_BIN2를 포함하여 여러 가지 BIN 순서를 시도했지만 StringComparison.Ordinal과 다릅니다. 내 테스트 케이스에는 특정 길이까지 모든 바이트 문자열 생성, System.Text.Encoding.Unicode.GetString을 사용하여 문자열로 변환, StringComparison.Ordinal을 사용하여 정렬, 결과를 "order"를 사용하여 데이터베이스와 비교하는 작업이 포함됩니다 콜레트 X ". _BIN 또는 _BIN2 순서 중 메모리 정렬 순서가 아직 일치하지 않습니다. –
@larry - db에서 문자열을 어떻게 생성하고 있습니까? 그냥 캐스팅 (0x .....로 nvarchar (N))? – ahains