您的位置:首页 > 数据库 > 数据库管理 > 正文

SCOPE_IDENTITY的用法

更多 时间:2015-4-6 类别:数据库 浏览量:2198

SCOPE_IDENTITY的用法

SCOPE_IDENTITY的用法

SCOPE_IDENTITY的作用是返回为当前会话和当前作用域中的任何表最后生成的标识值

例如

1、有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。

2、假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。

3、@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。

4、SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。

 


SCOPE_IDENTITY函数,IDENT_CURRENT函数以及@@IDENTITY的区别

 

1、SCOPE_IDENTITY函数返回当前作用域内,返回最后一次插入数据表的标识,意思是说,高并发的时候,它不会受到其它会话里的INSERT操作的影响

2、IDENT_CURRENT函数有点小意思,它不受作用域的影响,但是受限于具体的表,即它返回某表最后一条INSERT的返回标识,不受会话作用域影响,但是受到指定的表的影响

3、@@IDENTITY这个全局变量只受会话影响,不受具体表影响,也不受作用域影响

 

4、例如

 

  •  
  • SQL 代码   复制
  • 
    USE pubs
    DROP TABLE t6
    DROP TABLE t7
    GO
    CREATE TABLE t6(id int IDENTITY)
    CREATE TABLE t7(id int IDENTITY(100,1))
    GO
    CREATE TRIGGER t6ins ON t6 FOR INSERT 
    AS
    BEGIN
       INSERT t7 DEFAULT VALUES
    END
    GO
    --end of trigger definition
    
    SELECT   * FROM t6
    --id is empty.
    
    SELECT   * FROM t7
    --id is empty.
    
    --Do the following in Session 1
    INSERT t6 DEFAULT VALUES
    SELECT @@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 2
    SELECT @@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 SERVER
    您可能感兴趣