SQL Server IDENTITY自动递增字段是否是线程安全的?

时间:2015-03-09 16:31:46

标签: sql-server thread-safety identity

我对SQL Server IDENTITY自动递增列有一些疑问。

有人知道该字段是否是线程安全的吗?

我是否可以在多任务应用程序中使用SQL Server IDENTITY列,该应用程序尝试使用IDENTITY自动递增列并行插入某些记录?

你有关于那个的任何文档链接吗?

2 个答案:

答案 0 :(得分:3)

在某种意义上说,每个号码最多只发一次就是线程安全的。但是可以跳过数字。

这是一个广为接受的事实。如果不是这样,SQL Server将是垃圾。标识字段的可以分发唯一值。

请注意,您可以通过重新播种列来规避这些保证。这样你就可以随心所欲地发出它。

另请注意,IDENTITY约束不会强制该列中值的唯一性。

答案 1 :(得分:0)

当SQL Server使用并行性时,SCOPE_IDENTITY()@@IDENTITY函数存在错误:

  

当您使用SCOPE_IDENTITY()或@@ IDENTITY函数时   您可能会注意到,检索插入到标识列中的值   这些函数有时返回不正确的值。问题   仅当您的查询使用并行执行计划时才会发生。

请参阅Microsoft Support: "You may receive incorrect values when using SCOPE_IDENTITY() and @@IDENTITY"