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

  • 相关阅读:
    Google pagespeed优化首页加载速度详解
    juqery 学习之三 选择器<子元素><表单>
    juqery 学习之五 文档处理<包裹、替换、删除、复制>
    juqery 学习之四 筛选<过滤>
    关于鼠标点击其他地方隐藏层的实例(要引入jquery包哦)
    JAVASCRIPT 对象 用法(offset screen scroll client)
    [分享]NopCommerce支付插件开发步骤(页 1) 扩展开发
    juqery 学习之五 文档处理<插入>
    juqery 学习之六 CSS<css、位置、宽高>
    th scope="row"和th scope="col"什么意思??
  • 原文地址:https://www.cnblogs.com/myssh/p/1451964.html
Copyright © 2011-2022 走看看