首页 > 数据库 > mysql教程 > 如何在 @@IDENTITY、SCOPE_IDENTITY() 和 OUTPUT 之间进行选择以检索主键标识值?

如何在 @@IDENTITY、SCOPE_IDENTITY() 和 OUTPUT 之间进行选择以检索主键标识值?

Mary-Kate Olsen
发布: 2025-01-03 04:12:38
原创
438 人浏览过

How to Choose Between @@IDENTITY, SCOPE_IDENTITY(), and OUTPUT for Retrieving Primary Key Identity Values?

检索最后一个标识:@@IDENTITY、SCOPE_IDENTITY()、OUTPUT 等

在插入后检索主键标识字段值时,开发人员经常使用各种方法。本文深入探讨了 @@IDENTITY、SCOPE_IDENTITY() 和 OUTPUT 方法的差异和适用性。

@@IDENTITY 与 SCOPE_IDENTITY()

@@IDENTITY返回为任何表生成的最后一个 IDENTITY 值,无论范围如何。它不是范围安全的,这意味着它可能会从当前会话中触发的插入或其他语句返回身份。

SCOPE_IDENTITY() 行为类似,但它将返回值限制为当前语句以及连接范围。因此,它只检索执行语句期间生成的标识。

OUTPUT 方法

INSERT 语句中的 OUTPUT 子句返回一个表,其中包含插入到表中的数据。这包括生成的 IDENTITY 值:

INSERT INTO #Testing (ID, somedate)
OUTPUT INSERTED.*
DEFAULT VALUES;
登录后复制

方法选择

适当的方法取决于具体要求:

  • @@IDENTITY: 适用于检索当前范围内所有表中最后生成的标识session.
  • SCOPE_IDENTITY():仅在需要当前语句和作用域中的标识时有用。
  • OUTPUT:不仅适合检索身份以及其他插入的值。

范围安全

OUTPUT 方法不是明确的范围安全的。它检索当前范围内生成的身份,但如果这些身份已分配给其他表,它也可能返回它们。为了严格的范围安全,请使用 SCOPE_IDENTITY()。

附加说明

  • IDENT_CURRENT(table):返回为特定表生成的最新标识值,无论连接或范围如何。然而,它主要用于遗留代码。

以上是如何在 @@IDENTITY、SCOPE_IDENTITY() 和 OUTPUT 之间进行选择以检索主键标识值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板