zoukankan      html  css  js  c++  java
  • sql INSERT之后获取主键值【转】

    SQL   SERVER   2000   中的标识值获取函数    
      IDENTITY(标识)列,也有很多人称之为自增列,在SQL   Server   2000中,标识列通过IDENTITY来定义,下面是与获取最后插入记录的标识值有  
       
      关的函数的一个示例说明    
       
              SQL   Server   中,可以使用   SCOPE_IDENTITY()、   @@IDENTITY   、   IDENT_CURRENT()   来取得最后插入记录的值值,它们的区别在于:  
      SCOPE_IDENTITY()   返回插入到同一作用域中的   IDENTITY   列内的最后一个   IDENTITY   值。一个作用域就是一个模块——存储过程、触发器、函  
       
      数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。  
      @@IDENTITY               返回在当前会话的所有表中生成的最后一个标识值  
      IDENT_CURRENT()     返回为任何会话和任何作用域中的指定表最后生成的标识值  
      下面以一个示例来说明它们的区别    
       
      --   a)   示例代码    
      --   ===========================================  
      --   创建测试表  
      --   ===========================================  
      USE   tempdb  
      GO  
       
      CREATE   TABLE   t1(id   int   IDENTITY,col   int)  
      INSERT   t1   SELECT   1  
      UNION   ALL   SELECT   2  
      CREATE   TABLE   t2(id   int   IDENTITY,col   int)  
      GO  
       
      CREATE   TRIGGER   TR_insert_t2   ON   t2  
      FOR   INSERT  
      AS  
              INSERT   t1   SELECT   3  
      GO    
       
      --   ===========================================  
      --   测试三个函数..1  
      --   ===========================================  
      INSERT   t2   VALUES(1)  
      SELECT   [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),  
              [@@IDENTITY]=@@IDENTITY,  
              [IDENT_CURRENT()   For   t1]=IDENT_CURRENT(N't1'),  
              [IDENT_CURRENT()   For   t2]=IDENT_CURRENT(N't2')  
       
      /*--结果  
      SCOPE_IDENTITY()       @@IDENTITY       IDENT_CURRENT()   For   t1           IDENT_CURRENT()   For   t2                                        
      ------------------   ------------   --------------------------   -----------------------  
      1                                     3                         3                                                     1  
       
      (所影响的行数为   1   行)  
      --*/  
      GO  
       
      --   ===========================================  
      --   测试三个函数..2  
      --   ===========================================  
      INSERT   t1   VALUES(10)  
      SELECT   [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),  
              [@@IDENTITY]=@@IDENTITY,  
              [IDENT_CURRENT()   For   t1]=IDENT_CURRENT(N't1'),  
              [IDENT_CURRENT()   For   t2]=IDENT_CURRENT(N't2')  
       
      /*--结果  
      SCOPE_IDENTITY()       @@IDENTITY       IDENT_CURRENT()   For   t1           IDENT_CURRENT()   For   t2                                        
      ------------------   ------------   --------------------------   -----------------------  
      4                                     4                         4                                                     1  
       
      (所影响的行数为   1   行)  
      --*/  
      GO  
       
      --   ===========================================  
      --   测试三个函数..3  
      --   **   开启一个新连接,执行下面的代码   **  
      --   ===========================================  
      SELECT   [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),  
              [@@IDENTITY]=@@IDENTITY,  
              [IDENT_CURRENT()   For   t1]=IDENT_CURRENT(N't1'),  
              [IDENT_CURRENT()   For   t2]=IDENT_CURRENT(N't2')  
       
      /*--结果  
      SCOPE_IDENTITY()       @@IDENTITY       IDENT_CURRENT()   For   t1           IDENT_CURRENT()   For   t2                                        
      ------------------   ------------   --------------------------   -----------------------  
      NULL                               NULL                   4                                                   &n    
       
      --===========================================  
      --   删除测试环境  
      --   ===========================================  
      DROP   TABLE   t1,t2    
       
      --   b)   代码结果说明    
      从上面的代码可以看到:  
      IDENT_CURRENT()     始终返回指定表最后插入的标识值  
      @@IDENTITY               返回当前会话的标识值,无论是否在同一个作用域,在测试1、2中,可以看到它返回的是触发器中插入记录的标识值,而在  
       
      测试3中,因为当前会话无插入记录,所以返回NULL  
      SCOPE_IDENTITY()   返回当前会话同一作用域的标识值,所以在测试1、2中,它返回的值不受触发器的影响,而在测试3中,因为当前会话无插  
       
      入记录,所以返回NULL

  • 相关阅读:
    B2C电子商务网站的突围——再议什么是B2C网站,互联网营销 狼人:
    迅雷网站设计浅析,互联网营销 狼人:
    构建一个高性能的网页抓取器,互联网营销 狼人:
    Velocity China 2010大会回顾,互联网营销 狼人:
    尝试使用GraphicsMagick的缩略图功能,互联网营销 狼人:
    美妙的模电2013/4/18
    找素数 素数就是不能再进行等分的整数。比如:7,11。而9不是素数,因为它可以平分为3等份。
    WMI技术介绍和应用——查询硬件信息
    码农如何快速打造一个有设计感的网站 How to Make Your Site Look HalfDecent in Half an Hour
    poj321101背包
  • 原文地址:https://www.cnblogs.com/myssh/p/1451964.html
Copyright © 2011-2022 走看看