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值(不受作用域限制)

  • 相关阅读:
    pinfinder
    华为方舟编译器
    SSH安全加固
    KindEditor
    SQL SERVER 常见SQL和函数使用
    SQL 时间处理
    sqlSQL2008如何创建定时作业(代理服务)(转)
    登录之问题总结
    文件操作(增删查改)
    SQL2008安装后激活方式以及提示评估期已过解决方法(转)
  • 原文地址:https://www.cnblogs.com/jiangyuxuan/p/2100000.html
Copyright © 2011-2022 走看看