2010-04-27 35 views
2

我想知道SQL Server如何排序从查询返回的数据,并且各个表的Id列都是uniqueidentifier类型。对于SQL选择返回多个值,当Id为GUID时它们如何排序?

创建所有的GUID,当我使用NHibernate的GuidComb做这样的事情:

Sheet sheet = sheetRepository.Get(_SheetGuid_); // has many lines items 
IList<SheetLineItem> lineItems = sheet.LineItems; 

我只是想弄清楚他们将怎样当我做这样的事情进行排序:

foreach (SheetLineItem lineItem in lineItems) 

我看不出找到在路上的GUID的好文章是由SQL被命令时,如果这是发生了什么比较。

回答

4

除非您包含ORDER BY子句,否则SQL Server不保证结果上的任何顺序。它可能会以某种顺序一致地返回(例如,聚簇索引顺序),但是您不能确定这总是如此(例如,如果查询在多个线程上拆分并执行,当结果合并时,由于线程可能以不同的顺序完成,所以每次执行的顺序可能不同)。

获得特定订单的唯一方法是使用ORDER BY子句。在NHibernate中,这可以通过在映射文件中对您的行李(或等同物)进行order by =“...”来实现。

参见“订单由”获取更多信息NHibernate的文档:http://nhibernate.info/doc/nh/en/index.html

+0

+1我完全忘记了我可以为每个特定的包设置订单。感谢您的提醒。 – 2010-04-27 18:33:47

6

GUID按ORDER BY排序this way。引用的文章......

  • 0..3中从左到右的顺序进行评估,并不太重要,然后
  • 4..5中从左到右的顺序进行评估,然后
  • 6 ..7中从左到右的顺序进行评估,然后
  • 8..9在从右到左的顺序进行评估,然后
  • A..F在从右到左的顺序进行评估,并且是最重要的
+0

@gbn我找到了那篇文章。它是否表明'00000000-0000-0000-0000-010000000000'是该列表中最大的GUID,'01000000-0000-0000-0000-000000000000'是最小的?在这方面,对于以下A..F系列:9d6500c1d13c,9d6500c5c1da,9d6500c60f1e,它们是否被正确订购用于ASC,因为块D分别是c1,c5,c6? – 2010-04-27 18:58:42

+0

Chris F:我没有深入研究过这篇文章,因为我没有使用任何类型的GUIDs ...对不起。 – gbn 2010-04-27 19:08:58

相关问题