【问题标题】:In SQL server how do I order table rows by insertion order if primary key is GUID?在 SQL Server 中,如果主键是 GUID,我如何按插入顺序对表行进行排序?
【发布时间】:2012-05-08 15:41:02
【问题描述】:

我已经开始为我的主键使用 GUID,而不是自动递增整数。

但是,在开发过程中,我习惯于查询(从 SQL 管理工作室或 Visual Studio)数据库,以查看我的应用程序刚刚插入的记录,但我对无法按主键排序的事实感到恼火desc 以查看最近的记录。

有没有办法实现?

【问题讨论】:

  • 即使有身份,您实际上也永远无法知道插入顺序,因为较长的插入过程可能意味着 5 在 6 之后被实际插入。如果您想知道插入顺序,请添加一个 dateInserted 列getdate() 的默认值。 GUID 作为主键也是一个问题,原因有很多,请研究一下。您可能需要考虑使用 NEWSEQUENTIALID() 来生成 GUID
  • @HLGEM - 使用 SysUTCDateTime() 值可以减少在更改夏令时发生的一些混乱。
  • 所以,我认为简短的回答是否定的 :( 正如我所说,它只在开发过程中很重要,所以我可以假设最大的 id 是最新的。同样代表时间戳. 我很清楚它不一定是独一无二的,但对于开发人员来说肯定会这样做。

标签: sql-server primary-key guid


【解决方案1】:

您不能根据广告订单对 GUID 列进行排序。您需要依赖另一列。

我的建议是添加一个名为CreationMoment 的列作为DateTime,默认值为GETDATE()。从理论上讲,您可能有冲突(即相同的创建日期/时间),因此您必须确定该数据类型是否合适。根据我的经验,这从来都不是问题。

【讨论】:

    【解决方案2】:

    您不能,您必须添加具有自动增量的新字段 bigint 并依赖,无需将其设为键。 bigint 没有冲突,也没有大小问题

    【讨论】:

      【解决方案3】:

      @Yuck 和 @Sameh 都有很好的答案,但我认为 TIMESTAMP 列更适合您的需求。它保证是唯一的,并且可以使用 ORDER BY 进行排序。

      MSDN - timestamp (Transact-SQL)

      【讨论】:

      • 小心 - 每次插入和更新都会为一行分配一个新的时间戳值。
      猜你喜欢
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多