1つまたは複数のSQL Server 2000データベースからのソートされた2つのストリームのストリームを1つのソート済みストリームに変換するC#でメモリ内マージを行う必要があります。これらのデータストリームは膨大なものになる可能性があるため、両方のストリームをメモリに取り込む必要はありません。代わりに、メモリ内の各ストリームから一度に1つのアイテムを保持し、各ステップで各ストリームの現在のアイテムを比較し、最小値を最終ストリームにプッシュし、適切なソースストリームから次のアイテムを引き出す必要があります。ただし、メモリ内の比較はデータベースの照合と一致する必要があります(ストリーム[A,B,C]
と[A,B,C]
を考慮してください:正しいマージされたシーケンスは[A,A,B,B,C,C]
ですが、メモリ内比較でC < B
と考える場合、メモリ内マージ。それはB
を見ているだろう、その時点でA,A,B
、およびC
を与えるであろう、とC
が得られる、間違って並べ替えられたストリームになる)SQL Server 2000でのVARCHAR照合とVARBINARYの並べ替え
をだから、私の質問は:のいずれかを模倣する方法はありますSQL Server 2000の照合順序はC#のSystem.StringComparison
列挙型ですか?逆の場合は?私が最も近かったのはSystem.StringCompaison.Ordinal
をデータベースの文字列の結果をVARBINARY
標準のVARBINARY
に変換したものです。これは動作しますが、私はむしろ"order by name collate X"
句をSQLクエリに追加したいと思います。すべての文字列をVARBINARY
に変換するのではなく、データベースを終了してメモリに入ったときに文字列に戻すときと同じように、VARBINARY
のように動作します。
SQL Server 2000には_BINが適用されますか? –
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