Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 @@身份与并发_Sql_Multithreading_Identity - Fatal编程技术网

Sql @@身份与并发

Sql @@身份与并发,sql,multithreading,identity,Sql,Multithreading,Identity,假设我有一个表TableA,它的主键被标记为IDENTITY,我在存储过程中执行以下两条语句 INSERT INTO TableA VALUES ('a', 'b', 'c', 'd') SET @SomeVariable = @@IDENTITY 为了使@SomeVariable存储刚刚添加的值的主键。如果另一个客户端在执行上述语句之间执行相同的insert,是否有可能@@IDENTITY因此@SomeVariable存储了错误的(最近的)值 非常感谢。这取决于你对另一位客户的看法@@IDE

假设我有一个表TableA,它的主键被标记为
IDENTITY
,我在存储过程中执行以下两条语句

INSERT INTO TableA VALUES ('a', 'b', 'c', 'd')
SET @SomeVariable = @@IDENTITY
为了使
@SomeVariable
存储刚刚添加的值的主键。如果另一个客户端在执行上述语句之间执行相同的insert,是否有可能
@@IDENTITY
因此
@SomeVariable
存储了错误的(最近的)值


非常感谢。

这取决于你对另一位客户的看法@@IDENTITY返回在连接/会话上生成的最后一个标识值(与命令的表或范围无关)


因此,如果您的客户端不共享连接,则答案是“否”。如果他们共享连接(我不这样认为,因为它会有许多其他问题),则答案是“是”。

@@IDENTITY
仅用于您的连接(而非全局),因此您应该获取连接上发生的最后一个标识值。但是,这可能来自不同的范围,例如触发器

这就是为什么最佳实践是这样的:它适用于插入的范围,不考虑触发器等

对于一个真正全局的、非并发的、坦率地说是愚蠢的解决方案,这是一个很好的选择。这将受到每个连接并写入表的人的影响