假设我有一个表 TableA ,其主键标记为IDENTITY
,并且我在存储过程中执行以下两个语句
INSERT INTO TableA VALUES ('a', 'b', 'c', 'd')
SET @SomeVariable = @@IDENTITY
以便@SomeVariable
存储刚刚添加的值的主键。如果另一个客户端在执行上述语句之间执行相同的插入,那么@@IDENTITY
和@SomeVariable
是否可能存储错误的(最新的)值?
非常感谢。
答案 0 :(得分:5)
@@IDENTITY
仅适用于您的连接(非全局),因此您应该获得连接上发生的最后一个IDENTITY值。但是,这可能来自不同的范围,例如触发器。
这就是为什么SCOPE_IDENTITY()
是最佳实践的原因:它是针对INSERT的范围而不考虑触发器等
对于一个真正的全球性,非并发性和坦率的愚蠢解决方案,它是IDENT_CURRENT
。这将受到连接和写入表的所有人的影响。
答案 1 :(得分:0)
这实际上取决于你对另一个客户的意思。 @@ IDENTITY返回在连接/会话上生成的最后一个标识值(无论命令的表或范围如何)。
因此,如果您的客户不共享连接,则答案为否。如果他们分享这种联系(我不这么认为,因为它会有许多其他问题)答案是肯定的。