Scope_Identity 和@@Identity 有啥区别[重复]

Posted

技术标签:

【中文标题】Scope_Identity 和@@Identity 有啥区别[重复]【英文标题】:What is the difference of Scope_Identity and @@Identity [duplicate]Scope_Identity 和@@Identity 有什么区别[重复] 【发布时间】:2014-05-08 12:58:08 【问题描述】:

为了一个好的答案,我从高低到低,但我找到的每个答案在答案中都有点模糊。那么,对于 SQL ID @@IDENTITYSCOPE_IDENTITY,什么是真正更好的以及为什么,或者什么时候使用一个比另一个更好。

【问题讨论】:

@SonerGönül 严格来说不是重复的,而是类似 your answer is here 但我同意这应该关闭。 【参考方案1】:

比较

@@IDENTITY

它返回为当前会话中的任何表生成的最后一个标识值,跨越所有范围。

让我解释一下...假设我们在表上创建一个插入触发器,该触发器在另一个表中插入一行并生成一个标识列,然后@@IDENTITY 返回由触发器创建的标识记录。

SCOPE_IDENTITY

它返回为当前会话和当前范围内的任何表生成的最后一个标识值。

让我解释一下...假设我们在表上创建一个插入触发器,该触发器在另一个表中插入一行并生成一个标识列,那么 SCOPE_IDENTITY 结果不受影响,但如果触发器或用户定义的函数在产生该值的同一表返回该身份记录,然后 SCOPE_IDENTITY 返回由触发器或用户定义的函数创建的该身份记录。

IDENT_CURRENT

它返回在任何会话和任何范围内为特定表生成的最后一个标识值。

换句话说,我们可以说它不受作用域和会话的影响,它只依赖于特定的表,并返回在任何会话或作用域中生成的与表相关的标识值。

【讨论】:

以上是关于Scope_Identity 和@@Identity 有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

被 SCOPE_IDENTITY() 和 GO 弄糊涂了

SCOPE_IDENTITY()和 SELECT @@IDENTITY 的用法

Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 有啥区别?

DapperORM 中 'SELECT CAST(SCOPE_IDENTITY() as int)' 的重要性

SCOPE_IDENTITY的用法

在插入时插入 SCOPE_IDENTITY