通过uniqueidentifer类型列排序结果。我的情况可靠吗?

时间:2011-01-27 22:10:58

标签: sql-server tsql

我有一个具有uniqueidentifier类型的id列的表。这个专栏也是PK。此列的默认值为NewSequentialID(),但大部分时间都是通过NewID()函数填充的。该表还有另一个日期时间类型列。我需要通过datetime列对此表中的结果进行排序,但是如果datetime的值与我需要的数据相同,那么我需要以与此表中插入的数据相同的顺序获取数据(意味着首先插入的行应首先显示)。如果我先按日期时间然后按Id列命令我的结果,它会给我我需要的东西吗?

我知道可能有更好的方法(比如有一些带有标识的int类型列或者其他东西而不是依赖uniqueidentifier)但是这个东西已经在生产中了,我只需要为一些repors进行排序。

3 个答案:

答案 0 :(得分:2)

不,这不可靠。来自documentation

  

创建一个GUID,该GUID大于此函数先前在指定计算机上自Windows启动以来生成的任何GUID。重新启动Windows后,GUID可以从较低范围重新开始,但仍然是全局唯一的。

它可能大多数当时,但是如果您的服务器曾经重新启动过(假设您正在应用安全更新),那么您可能会遇到问题。另一方面,服务器重启的同时插入两行是不太可能的,所以你可能会侥幸逃脱......但我强烈建议你改变你的数据模型

答案 1 :(得分:1)

没有。 GUID不一定按插入顺序分配。问题是,如果您的表没有记录插入订单,那么您不能期望重现该订单。

答案 2 :(得分:0)

时间戳值是在插入行的顺序中对行进行排序的最可靠方法。您可以测试以查看多个行是否具有相同的时间戳值:

            .... group by mytimestamp having count(*) > 1

我从未遇到过这种情况。