Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server标识自动递增字段是线程安全的吗?_Sql Server_Thread Safety_Identity - Fatal编程技术网

Sql server SQL Server标识自动递增字段是线程安全的吗?

Sql server SQL Server标识自动递增字段是线程安全的吗?,sql-server,thread-safety,identity,Sql Server,Thread Safety,Identity,我有一些关于SQL ServerIDENTITYauto-incremented列的问题 有人知道该字段是否是线程安全的吗 我是否可以在多任务应用程序中使用SQL ServerIDENTITY列,该应用程序尝试使用IDENTITY自动递增列并行插入一些记录 你有关于这方面的文档链接吗?它是线程安全的,因为每个数字最多只能分发一次。不过,数字可以跳过 这是一个公认的事实。如果不是这样,SQL Server将是垃圾。标识字段的作用是传递唯一的值 请注意,您可以通过重新设置列的种子来规避这些保证。这样

我有一些关于SQL Server
IDENTITY
auto-incremented列的问题

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

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


你有关于这方面的文档链接吗?

它是线程安全的,因为每个数字最多只能分发一次。不过,数字可以跳过

这是一个公认的事实。如果不是这样,SQL Server将是垃圾。标识字段的作用是传递唯一的值

请注意,您可以通过重新设置列的种子来规避这些保证。这样你就可以随心所欲地分发


还要注意的是,
IDENTITY
约束不会强制该列中值的唯一性。

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

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


请参见

如果重新设定标识的种子,则可以重复编号。它们不是唯一的,也不能保证是唯一的。我同意线程安全部分,但唯一性部分并不正确@SeanLange是的。。。我补充了几句。但谁会对此感到惊讶?!我会删除你答案中的这一部分,因为它在文档中明确指出,唯一性是不保证的,而且很容易证明。你说的是重新播种时的唯一性,对吗?我不太在乎那个案子。没有其他可以返回非唯一数字的情况。;我没有说列值是唯一的。我说不会分发副本。如果需要,可以手动插入重复项。这超出了范围。是的,我说的是重新播种。当一些事情被说成是这样的事实而它是不正确的时候,我感到很烦恼。没什么大不了的。我想确定的是,很明显,仅仅因为列的identity属性设置为true,并不意味着值总是唯一的。true,但……这与OP的问题无关,它已经被修复。@SeanLange:我认为有些评论值得否决票。忽视问题这不是解决办法。OP想知道
IDENTITY
列和并行插入是否存在问题。因为通常在将数据插入
IDENTITY
SCOPE\u IDENTITY
@@IDENTITY
函数后,会使用这些函数来获取为
IDENTITY
列生成的最后一个ID值,我想OP应该知道这个错误。我同意你的意见。然而,否决票不是我投的。我不会对正确但有点离题的事情投反对票。这是一个矛盾。嗯?你的评论100%真实无误,但我有点离题。这不值得我投反对票。