zoukankan      html  css  js  c++  java
  • SCOPE_IDENTITY()

    @@IDENTYITY,SCOPE_IDENTITY的主要区别:在有触发器中而且触发器的内容里面含有插入标识符的操作的时候,@@IDENTITY则返回的是触发器里面新插入标识符的值而SCOPE_IDENTITY则是不变,即离该语句上面最近的标识符的值。

     SCOPE_IDENTITY()测试用例:

    --会话1,第一条返回1,第二条还是返回1,可得知SCOPE_IDENTITY()获取到的是当前会话最近的插入成功的标识符的值
    INSERT INTO t(name) values('插入一条') ;
    SELECT SCOPE_IDENTITY();
    INSERT INTO t SELECT '0个影响' FROM t WHERE 1=2
    SELECT SCOPE_IDENTITY()

    --会话1,返回批量插入的最后一个标识符的值(这里是4),所以这里max(id)返回的值和SCOPE_IDENTITY()的值是相等的
    INSERT INTO t(name) values('插入一条') ,('插入2条') ,('插入3条')
    SELECT MAX(ID) FROM t;
    SELECT SCOPE_IDENTITY();

     

    -- 开启事务,然后回滚,SCOPE_IDENTITY()值不会消失 (这里SCOPE_IDENTITY()依旧会显示值,即使没有插入到数据库里面)
    BEGIN  TRAN
    INSERT INTO t(name) values('插入xx条')
    SELECT SCOPE_IDENTITY()
    ROLLBACK TRAN
    select * from t where name='插入xx条'

    --给T表添加一个触发器,触发器功能是给t2表(有主键,未设置标识符)插入一条记录,执行后返回的是T表的值。
    INSERT INTO t(name) values('插入一条')
    SELECT SCOPE_IDENTITY()
    
    SELECT MAX(ID) FROM T2;

    --给T表添加一个触发器,触发器功能是给t2表(无主键,未设置标识符)插入一条记录,执行后返回的是T表的值。
    INSERT INTO t(name) values('插入一条')
    SELECT SCOPE_IDENTITY()
    
    SELECT MAX(ID) FROM T2;

    --给T表添加一个触发器,触发器功能是给t2表(有主键,有设置标识符)插入一条记录,执行后返回的是T表的值(这个是和@@IDENTITY根本的不同,@@IDENTITY返回的是T2表的标识符的值)
    INSERT INTO t(name) values('插入一条')
    SELECT SCOPE_IDENTITY()
    
    SELECT MAX(ID) FROM T2;

    --给T表添加一个触发器,触发器功能是给t2表(无主键,有设置标识符)插入一条记录,执行后返回的是T表的值(这个是和@@IDENTITY根本的不同,@@IDENTITY返回的是T2表的标识符的值)
    INSERT INTO t(name) values('插入一条')
    SELECT SCOPE_IDENTITY()
    
    SELECT MAX(ID) FROM T2;

    BEGIN TRAN
    --获取会话级别无触发器情况下的最近批处理的标识符
    INSERT INTO T(name) VALUES('插入一条数据')
    SELECT MAX(ID) FROM T;
    SELECT SCOPE_IDENTITY();
    
    INSERT INTO T(name) VALUES('插入一条数据')
    SELECT MAX(ID) FROM T;
    SELECT SCOPE_IDENTITY();
    COMMIT TRAN

    BEGIN TRAN
    --获取会话级别无触发器情况下的最近批处理的标识符
    INSERT INTO T(name) VALUES('插入一条数据')
    SELECT MAX(ID) FROM T;
    SELECT SCOPE_IDENTITY();
    
    INSERT INTO T(name) VALUES('插入一条数据')
    SELECT MAX(ID) FROM T;
    SELECT SCOPE_IDENTITY();
    COMMIT TRAN

    参考资料:https://msdn.microsoft.com/zh-cn/library/ms190315(v=sql.90).aspx

  • 相关阅读:
    php命令注入
    mysql事物
    安装php环境
    移除服务器缓存实例
    show user profile synchronization tools
    manual start user profile import
    JSON is undefined. Infopath Form People Picker in SharePoint 2013
    asp.net web 应用站点支持域账户登录
    Load sharepoint envirement by powershell
    sharepoint 2016 download
  • 原文地址:https://www.cnblogs.com/blog-east/p/7443125.html
Copyright © 2011-2022 走看看