TSQL中`IDENTITY`的适当用法
可能重复:
获取插入行身份的最佳方法?
什么时候适用?应该如何在T-SQL中使用不同的IDENTITY
关键字?
看看SQL SERVER - @@ IDENTITY vs SCOPE_IDENTITY()vs IDENT_CURRENT - 检索最后插入的记录身份
来自文章
SELECT @@ IDENTITY
它返回连接上产生的最后一个IDENTITY值,而不管生成该值的表是什么,也不管产生该值的语句的范围如何。 @@ IDENTITY将返回当前会话中输入到表中的最后一个标识值。 虽然@@ IDENTITY仅限于当前会话,但不限于当前范围。 如果你在表上有一个触发器,导致在另一个表中创建一个标识,那么你将得到最后创建的标识,即使它是创建标识的触发器。
SELECT SCOPE_IDENTITY()
它返回连接和同一范围内的语句生成的最后一个IDENTITY值,而不管产生该值的表。 SCOPE_IDENTITY(),如@@ IDENTITY,将返回当前会话中创建的最后一个身份值,但它也将其限制为当前范围。 换句话说,它将返回您明确创建的最后一个标识值,而不是由触发器或用户定义函数创建的任何标识。
SELECT IDENT_CURRENT('tablename')
它返回表中生成的最后一个IDENTITY值,而不考虑创建该值的连接,而不考虑生成该值的语句的范围。 IDENT_CURRENT不受范围和会话的限制; 它仅限于指定的表格。 IDENT_CURRENT返回为任何会话和任何范围中的特定表生成的标识值。
MSDN对此有很好的参考。
简而言之,@@ IDENTITY的作用域是服务器上的当前会话(如果例如表中存在触发器,也可以将IDENTITY列添加到表中,最终可能会在INSERT后检索错误的IDENTITY值)。
SCOPE_IDENTITY()将返回当前作用域的最后一个插入的ID,即不会给你上面所述的问题。
IDENT_CURRENT不限于任何会话,它会返回表级别的信息(在任何会话中为该表生成的最后一个ID)
链接地址: http://www.djcxy.com/p/94519.html