zoukankan      html  css  js  c++  java
  • SQL @@Identity ,Scope_identity() 区别

     碰到这样一个业务需求,例如表A ,B .表A有identity列,表B 也有identity列.

        use tempdb

         create table TM

        (M_id int  identity(1,1) primary key

         M_name varchar(100)  not null

         )

        insert into TM

       select 'aa'

      union all

      select 'bb'

         create table TN

        (N_id int  identity(100,1) primary key

         N_name varchar(100)  not null

         )

        在TM表上建立一个触发器:

        create trigger addTM

       on TM

       for insert as

       begin

        insert TN values('tai')

       end

     ----------------------------

      当你运行下面的语句时候:

     INSERT TZ
     select 'cc'

    SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY] --结果是1
    GO
    SELECT @@IDENTITY AS [@@IDENTITY] --结果是100
    GO

     

    这个作为一个作用域,什么是作用域:(一个模块就是一个作用域;一个存储过程、一个触发器、一个批处理或者一个函数都是一个独立的作用域。).

    显然 SCOPE_IDENTITY() 是在TZ 这个作用域上的,而@@IDENTITY 没有作用域的限制.它是个全局作用域.

    @@IDENTITY 是取全局操作的最后一步操作所产生的自增域的值的.

     

      scope_identity()

              返回当前会话同一作用域中的任意表生成的最后一个identity值

             @@identity

              返回当前会话插入到任意表生成的最后一个identity值(不受作用域限制)

  • 相关阅读:
    eclipse的优化 gc.log
    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
    JVM系列三:JVM参数设置、分析
    热加载
    彻底理解JAVA动态代理
    Linux下查看Web服务器当前的并发连接数和TCP连接状态
    个人博客 V0.0.3 版本 ...
    HTML5本地存储——IndexedDB(一:基本使用)
    如何在Blog中加入Google Analytics
    webpack中实现按需加载
  • 原文地址:https://www.cnblogs.com/jiangyuxuan/p/2100000.html
Copyright © 2011-2022 走看看