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