在数据库中执行SQL并对GUID列升序排序,结果为:
FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
E23CADA8-542C-4D83-865D-FA279BDA904F
而在C#中,用DataTable.DefaultView.Sort排序时得到的结果如下: 
E23CADA8-542C-4D83-865D-FA279BDA904F
FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
二种排序结果正好相反,不解其意,望高手回答。
注:DataTable中的列类型为GUID,和数据库列数据类型相同!

解决方案 »

  1.   

    select 'FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3' id union
    select 'E23CADA8-542C-4D83-865D-FA279BDA904F' 
    order by id
    /*
    id                                   
    ------------------------------------ 
    E23CADA8-542C-4D83-865D-FA279BDA904F
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3(所影响的行数为 2 行)
    */select 'FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3' id union
    select 'E23CADA8-542C-4D83-865D-FA279BDA904F' 
    order by id desc/*
    id                                   
    ------------------------------------ 
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
    E23CADA8-542C-4D83-865D-FA279BDA904F
    (所影响的行数为 2 行)
    */
      

  2.   

    order by 估计写得有点问题吧
      

  3.   

    order by没有问题,dawugui你用的是字符串,我的数据类型为GUID(uniqueidentifier)
      

  4.   

    在数据库中,我们用的guid是16字节,它的存储方式是二进制。
    我们看到的只是它的字符串格式,例如
    字符串格式: '6F9619FF-8B86-D011-B42D-00C04FC964FF'
    ---------------------------------------------------
    而实际上它的存储格式为二进制,例如:
    二进制格式: 0xff19966f868b11d0b42d00c04fc964ff
    这样我们在sql中排序的时候其实是按二进制格式来排序的,而不是字符串格式。
    这样我们在C#中是按字符串格式排序的。以上,就出现了楼主那样的结果
      

  5.   

    所以,guid类型来排序没有什么实际的意思,毕竟它是随机的。
      

  6.   


    declare @guid1 uniqueidentifier
    declare @guid2 uniqueidentifierset @guid1 = 'FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3'
    set @guid2 = 'E23CADA8-542C-4D83-865D-FA279BDA904F'
    select @guid1 id union
    select @guid2 
    order by id结果:
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
    E23CADA8-542C-4D83-865D-FA279BDA904F-------------------------------------------------
    select @guid1 id union
    select @guid2 
    order by id desc结果:
    E23CADA8-542C-4D83-865D-FA279BDA904F
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
      

  7.   

    比较奇怪的是C#中DataView中的列是GUID类型的列,排序时也应该按照十六进制进行排序,而不是按照字符串排序,看来可能是.net的BUG,感谢大家的回答!