我需要在 C# 中将来自一个或多个 SQL Server 2000 数据库的两个排序的字符串流在内存中合并到一个排序的流中。这些数据流可能很大,所以我不想将两个流都拉到内存中。相反,我需要在内存中的每个流中一次保留一个项目,并且在每个步骤中,比较每个流中的当前项目,将最小值推送到最终流中,然后从适当的源流中提取下一个项目。但是,要正确执行此操作,内存中的比较必须与数据库的排序规则相匹配(考虑流[A,B,C]
和[A,B,C]
:正确的合并序列是[A,A,B,B,C,C]
,但如果您的内存中比较认为,您的内存中C < B
合并将产生A,A,B
它将查看 aB
和 aC
, 并将产生C
, 导致错误排序的流。)
所以,我的问题是:有没有办法用System.StringComparison
C# 中的枚举来模仿 SQL Server 2000 中的任何排序规则或反之亦然?我最接近的是使用System.StringCompaison.Ordinal
转换为VARBINARY
标准VARBINARY
排序的数据库字符串的结果,这是可行的,但我宁愿只"order by name collate X"
在我的 SQL 查询中添加一个子句,其中 X 是一些排序规则,其工作方式与VARBINARY
排序,而不是将所有字符串在VARBINARY
它们离开数据库时转换为字符串,然后在它们进入内存时转换为字符串。