【问题标题】:Getting same sequence number from sequence object从序列对象中获取相同的序列号
【发布时间】:2016-10-04 11:34:00
【问题描述】:

是否有可能同时从一个SQL数据库的两个应用程序执行的SQL命令select next value for 'sequence_object'返回相同的序列号? (我使用 Azure SQL 数据库 v12)

【问题讨论】:

  • 根据文档,我相信答案是“是”(msdn.microsoft.com/en-us/library/ff878058.aspx)。如此令人震惊。要获得唯一性,您基本上需要在表中有一个标识列,插入一行,然后从那里读取值。
  • SQL2012 SP2 和 SQL2014 的修复:support.microsoft.com/en-us/kb/3011465
  • 为了清楚起见,文档符合 ANSI 标准,并且旨在永远不会通过竞争进程同时返回相同的序列号。这将违背序列的目的。但是,当服务器处于内存压力下时,SQL Server 存在一个已知问题,这本身通常是一个严重的问题。
  • @GordonLinoff 你误读了文档。它指出,根据序列填充值的列不能保证只有唯一值,因为您仍然可以手动插入值 - 标识列受设计保护。

标签: sql sql-server azure-sql-database


【解决方案1】:

不,如果是这样,那就是一个错误。

Sequence Numbers

上面 cmets 中引用的文档非常清楚。只有当序列自行重置并从头开始时,才能从序列中获得相同的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2018-10-05
    • 2020-12-25
    相关资源
    最近更新 更多