【发布时间】: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