小编典典

SQL Server - 获取插入行标识的最佳方法?

all

获取IDENTITY插入行的最佳方法是什么?

我知道@@IDENTITY和但不了解每个的优点和缺点IDENT_CURRENTSCOPE_IDENTITY

有人可以解释一下差异以及我应该何时使用它们吗?


阅读 130

收藏
2022-02-25

共1个答案

小编典典

  • @@IDENTITY返回在所有范围内为当前会话中的任何表生成的最后一个标识值。 您需要在这里小心 ,因为它是跨范围的。您可以从触发器而不是当前语句中获取值。

  • SCOPE_IDENTITY()返回为当前会话和当前范围中的任何表生成的最后一个标识值。 一般你想用什么

  • IDENT_CURRENT('tableName')返回为任何会话和任何范围内的特定表生成的最后一个标识值。这使您可以指定要从哪个表中获取值,以防上述两个不是您所需要的( 非常罕见 )。此外,正如 @ Guy Starbuck所提到的,“如果您想获取尚未插入记录的表的当前 IDENTITY 值,您可以使用它。”

  • 该语句的OUTPUT子句INSERT将允许您访问通过该语句插入的每一行。由于它的范围仅限于特定语句,因此它比上面的其他函数 更直接。 但是,它有点 冗长 (您需要插入表变量/临时表然后查询它),即使在语句回滚的错误情况下也会给出结果。也就是说,如果您的查询使用并行执行计划,这是获取标识的 唯一保证方法 (没有关闭并行性)。但是,它在触发器 之前 执行,不能用于返回触发器生成的值。

2022-02-25