0

我在msdn上研究了以下行。

"@@IDENTITY并将SCOPE_IDENTITY返回当前会话中任何表中生成的最后一个标识值。

但是,SCOPE_IDENTITY仅返回当前范围内的值。

@@IDENTITY不限于特定范围”

所以我的问题是上面几行中的“什么是current sessioncurrent scope”。

提前致谢。

4

2 回答 2

1

如果要返回刚刚插入的值(用于插入到子表中),那么通常需要使用作用域_identity()。它特定于您的连接运行的语句的范围。它不会给你任何其他人的身份价值。

@@identiy,也特定于您的范围,但它还包括范围中的触发器值,因此如果表有一个触发器也插入到一个标识,那就是返回的标识。因此,这意味着不应使用 @@identity 来返回您插入的值,因为一旦有人添加触发器,它将开始返回磨损的值。

然后是ident_current。这是最危险的,因为无论将它放在哪个连接中,它都会重新调整表上的最后一个身份。因此,如果您使用它来获取身份值,则需要注意它与您的连接记录无关放入并使用它来获取用于插入子表的标识是数据完整性问题的保证。

较新版本的 SQL Server 有一个 OUTPUT 子句,这远远优于使用上述三个项目中的任何一个,因为您可以返回一组身份和其他字段的值。

于 2013-04-16T15:36:26.210 回答
-2

@@IDENTITY 范围仅限于当前会话但 SCOPE_IDENTITY() 具有服务器所有会话的范围

于 2012-12-12T12:29:41.850 回答