sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别

来源:互联网 发布:java中字符串的拼接 编辑:程序博客网 时间:2024/04/30 06:44

转载自:http://blog.csdn.net/jinho/article/details/5267507

IDENT_CURRENT

返回为任何会话和任何作用域中的指定表最后生成的标识值。

语法

IDENT_CURRENT('table_name')

参数

table_name

是将要返回其标识值的表的名称。table_name 的数据类型为 varchar,没有默认值。

返回类型

sql_variant

注释

IDENT_CURRENT 类似于 Microsoft® SQL Server™ 2000 标识函数 SCOPE_IDENTITY 和 @@IDENTITY。这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。

  • IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。
  • @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
  • SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
示例

下面的示例说明由 IDENT_CURRENT、@@IDENTITY 和 SCOPE_IDENTITY 返回的不同的标识值。

USE pubsDROP TABLE t6DROP TABLE t7GOCREATE TABLE t6(id int IDENTITY)CREATE TABLE t7(id int IDENTITY(100,1))GOCREATE TRIGGER t6ins ON t6 FOR INSERT ASBEGIN   INSERT t7 DEFAULT VALUESENDGO--end of trigger definitionSELECT   * FROM t6--id is empty.SELECT   * FROM t7--id is empty.--Do the following in Session 1INSERT t6 DEFAULT VALUESSELECT @@IDENTITY      /*Returns the value 100, which was inserted by the trigger.*/SELECT SCOPE_IDENTITY()   /* Returns the value 1, which was inserted by the INSERT stmt 2 statements before this query.*/SELECT IDENT_CURRENT('t7')/* Returns value inserted into t7, i.e. in the trigger.*/SELECT IDENT_CURRENT('t6')/* Returns value inserted into t6, which was the INSERT statement 4 stmts before this query.*/-- Do the following in Session 2SELECT @@IDENTITY/* Returns NULL since there has been no INSERT action so far in this session.*/SELECT SCOPE_IDENTITY()/* Returns NULL since there has been no INSERT action so far in this scope in this session.*/SELECT IDENT_CURRENT('t7')/* Returns the last value inserted into t7.*/
具体:sql帮助文档