对于SQL select,返回多于1个值,当Id为GUID时,它们如何排序?

时间:2010-04-27 18:11:09

标签: sql sql-server nhibernate tsql uniqueidentifier

我想知道SQL Server如何命令从查询返回的数据,并且各个表的Id列都是uniqueidentifier类型。

我在创建所有GUID时使用NHibernate GuidComb并执行以下操作:

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

我只想弄清楚当我做类似的事情时如何订购它们:

foreach (SheetLineItem lineItem in lineItems)

我无法找到关于在订购时通过SQL比较GUID的方式的好文章,如果发生了什么

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

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

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

有关“order-by”的更多信息,请参阅NHibernate文档:http://nhibernate.info/doc/nh/en/index.html