在存储过程中使用@@ identity好/坏?

时间:2011-01-10 22:05:16

标签: tsql sql-server-2008

我有一个存储过程,插入一个具有Identity列的记录。 插入后我立即使用@@ identity在子表中插入记录。

这样做有什么影响吗?

4 个答案:

答案 0 :(得分:4)

如果您的版本提供此功能,通常不如SCOPE_IDENTITY那么好,因为@@ Identity不限于当前范围。 它将检索最新的标识,即使它来自不同表中的不同sp。

Pinal Dave对这里的IDENTITY产品有一个直截了当的解释: http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

答案 1 :(得分:3)

应该使用

SCOPE_IDENTITY。如果INSERT应该触发一个也执行标识插入的触发器,那么你将从@@ identity获得错误的值(即触发器插入产生的值)。

答案 2 :(得分:1)

@@ IDENTITY是为任何记录插入的最后一个标识值。如果您获得高用户并发性,那么您最终将得到错误的标识值,即,您将获得另一个请求刚刚插入的值。

对于插入当前范围的最后一个标识值,请使用SCOPE_IDENTITY

答案 3 :(得分:0)

只是为了标题“Identity Crisis

添加我最喜欢的文章