在TSQL中适当使用`IDENTITY`

Nov*_*Net 7 sql t-sql syntax identity

可能重复:
获取插入行标识的最佳方法是什么?

什么时候适当,有人应该如何IDENTITY在T-SQL中使用不同的关键词?

  • SELECT @@ IDENTITY,
  • SELECT SCOPE_IDENTITY()
  • SELECT IDENT_CURRENT('tablename')

Adr*_*der 5

看一下SQL SERVER - @@ IDENTITY vs SCOPE_IDENTITY()vs IDENT_CURRENT - 检索上次插入的记录标识

来自文章

SELECT @@ IDENTITY

它返回在连接上生成的最后一个IDENTITY值,无论生成该值的表如何,也不管生成该值的语句的范围如何.@@ IDENTITY将返回在当前会话中输入到表中的最后一个标识值.虽然@@ IDENTITY仅限于当前会话,但不限于当前范围.如果您在表上触发了导致在另一个表中创建标识的触发器,您将获得最后创建的标识,即使它是创建它的触发器.

SELECT SCOPE_IDENTITY()

它返回在连接上生成的最后一个IDENTITY值以及同一范围内的语句,而不管生成该值的表.与@@ IDENTITY一样,SCOPE_IDENTITY()将返回在当前会话中创建的最后一个标识值,但它也会将其限制为当前范围.换句话说,它将返回您显式创建的最后一个标识值,而不是由触发器或用户定义的函数创建的任何标识.

SELECT IDENT_CURRENT('tablename')

它返回表中生成的最后一个IDENTITY值,无论创建该值的连接如何,也不管生成该值的语句的范围如何.IDENT_CURRENT不受范围和会话的限制; 它仅限于指定的表格.IDENT_CURRENT返回在任何会话和任何范围内为特定表生成的标识值.