@@ IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT之间的差异

时间:2012-12-12 11:39:49

标签: sql-server sql-server-2008 sql-server-2008-r2

我在msdn上研究过以下一行。

@@IDENTITYSCOPE_IDENTITY将返回当前会话中任何表格中生成的最后一个标识值。

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

@@IDENTITY不限于特定范围“

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

@@ identiy也特定于您的范围,但它还包括范围内的触发器值,因此如果表具有也插入到标识的触发器,则返回标识。因此,这意味着不应使用@@ identity来返回您插入的值,因为只要有人添加了触发器,它就会开始返回worng值。

然后有ident_current。这是最危险的,因为无论使用哪种内容,它都会返回最后一个表格。因此,如果您使用它来获取身份值,那么您需要知道它与记录您的连接不是必需的放入并使用它来获取用于插入子表的标识是数据完整性问题的保证。

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

答案 1 :(得分:-2)

@@ IDENTITY,其范围仅限于当前会话 但是SCOPE_IDENTITY()在服务器的所有会话中都有作用域