我对SQL Server IDENTITY
自动递增列有一些疑问。
有人知道该字段是否是线程安全的吗?
我是否可以在多任务应用程序中使用SQL Server IDENTITY
列,该应用程序尝试使用IDENTITY
自动递增列并行插入某些记录?
你有关于那个的任何文档链接吗?
答案 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"