@@ IDENTITY和Concurrence

Mig*_*uel 2 sql multithreading identity

假设我有一个TableA,其主键标记为IDENTITY,并且我在存储过程中执行以下两个语句

INSERT INTO TableA VALUES ('a', 'b', 'c', 'd')
SET @SomeVariable = @@IDENTITY
Run Code Online (Sandbox Code Playgroud)

为了@SomeVariable存储刚刚添加的值的主键.如果另一个客户端执行上面的语句的执行之间的相同的插入,是有可能,@@IDENTITY因而@SomeVariable存储错误(最近)值?

非常感谢你.

gbn*_*gbn 5

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

这就是SCOPE_IDENTITY()最佳实践的原因:它是针对INSERT的范围而不考虑触发器等

对于真正的全球性,非并发性和坦率的愚蠢解决方案而言IDENT_CURRENT.这将受到连接和写入表的每个人的影响.