SQL Server 提供了多种方法来获取新插入行的标识。 每种方法都有其优点和缺点,因此选择取决于您的具体需求。本指南阐明了 @@IDENTITY
、IDENT_CURRENT
、SCOPE_IDENTITY
和 OUTPUT
子句之间的差异。
比较 @@IDENTITY
、IDENT_CURRENT
和 SCOPE_IDENTITY
@@IDENTITY
: 此函数返回在 当前会话 中生成的最后一个标识值,无论表如何。 对于从会话中的任何表检索 ID 很有用,但要小心:它可能会受到触发器或并发操作的影响。
IDENT_CURRENT
: 检索为 特定表 生成的最后一个标识值,无论会话或范围如何。 当您需要特定表的 ID 时,即使您没有直接插入行,也是理想的选择。
SCOPE_IDENTITY
: 返回在当前会话和范围内生成的最后一个身份值。 通常,这是检索最近插入的行的 ID 的最佳选择,因为它与同一语句中的其他并发进程隔离。
OUTPUT
子句:一个强大的替代方案
OUTPUT
子句提供了一种从 INSERT
语句访问插入行的直接方法。 您可以将标识值与其他列数据一起捕获到表变量或临时表中。 虽然简单,但使用起来稍微复杂一些,即使语句回滚也会返回数据。 至关重要的是,它在 触发器之前执行,因此它不会检索触发器生成的标识值。但是,它提供了在使用并行处理时获取身份值的唯一可靠方法,无论执行计划如何,都保证其可用性。
以上是我应该使用哪种 SQL Server 标识值检索方法(@@IDENTITY、IDENT_CURRENT、SCOPE_IDENTITY、OUTPUT 子句)?的详细内容。更多信息请关注PHP中文网其他相关文章!