小编典典

获得插入行身份的最佳方法?

sql

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

我知道@@IDENTITYIDENT_CURRENTSCOPE_IDENTITY,但不明白连接到每个利弊。

有人可以解释这些差异以及何时使用它们吗?


阅读 165

收藏
2021-05-05

共1个答案

小编典典

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

  • SCOPE_IDENTITY()返回为当前会话和当前范围中的任何表生成的最后一个标识值。 通常,您要使用什么

  • IDENT_CURRENT('tableName')返回在任何会话和任何作用域中为特定表生成的最后一个标识值。这可以让您指定要从哪个表中获取值,以防上述两个表不是您真正需要的表( 非常少见 )。另外,正如@GuyStarbuck提到的那样,“如果要获取未插入记录的表的当前IDENTITY值,则可以使用它。”

  • OUTPUT条款的的INSERT声明将让您访问每一个经该语句插入行。由于它是针对特定语句的,因此它比上面的其他函数 更直接 。但是,它有些 冗长 (您需要将其插入到表变量/临时表中,然后对其进行查询),即使在语句回滚的错误情况下,它也可以提供结果。也就是说,如果您的查询使用并行执行计划,则这是 唯一 获得身份的 保证方法 (缺少关闭并行性)。但是,它 触发器 之前 执行 不能用于返回触发器生成的值。

2021-05-05