sql - Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 之间有什么区别?

标签 sql sql-server identity

我知道 Scope_Identity()Identity()@@IdentityIdent_Current() 全部获取身份列的值,但我很想知道其中的区别。

我遇到的部分争议是,应用于上述这些函数的范围是什么意思?

我还想要一个使用它们的不同场景的简单示例?

最佳答案

  • @@identity 函数返回在同一 session 中创建的最后一个身份。
  • scope_identity() 函数返回在同一 session 和同一范围内创建的最后一个身份。
  • ident_current(name) 返回为任何 session 中的特定表或 View 创建的最后一个标识。
  • identity() 函数不用于获取身份,而是用于在 select...into 查询中创建身份。

session 是数据库连接。范围是当前查询或当前存储过程。

scope_identity()@@identity 函数不同的情况是,如果表上有触发器。如果您有一个插入记录的查询,导致触发器在某处插入另一条记录,则 scope_identity() 函数将返回查询创建的标识,而 @@identity code> 函数将返回触发器创建的标识。

因此,通常您会使用 scope_identity() 函数。

关于sql - Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920558/

相关文章:

mysql - 存储过程中的临时表返回的值与常规查询中的值不同

sql - 创建索引 View

nosql - 是否可以在表现出最终一致性的数据存储中管理用户/身份?

python是字符串的运算符行为

sql - 如何在 RPostgreSQL 中使用参数(插入数据)

sql - SQL区分和计数

SQL 服务器 2008 : N small databases VS 1 database with N schemas

mysql - 将 MySQL 时间戳字段转换为 SQL Server 2005 日期字段

sql-server - 连接 2 个表时排除输出中重复列的 T-SQL 语法是什么?

user-interface - microsoft.aspnetcore.identity 的用户界面