zoukankan      html  css  js  c++  java
  • SqlServer批量刷数据执行事务回滚语句备份

          企业进行对数据库执行刷数据工作,一段很长的语句希望同时成功或者失败时用到。

    1.建立测试环境

    /************************************************************
     * Code formatted by SoftTree SQL Assistant ?v6.5.278
     * Time: 2016/9/29 21:33:55
     ************************************************************/
    ---建立测试环境
    CREATE DATABASE TestTransaction
    USE TestTransaction
    GO
    CREATE TABLE testTable
    (
        testId       INT PRIMARY KEY IDENTITY,
        testName     VARCHAR(20) NOT NULL
    );

    2.执行事务

    ---开始
    
    BEGIN TRY
        BEGIN TRANSACTION
            INSERT INTO testTable VALUES('3')     
             INSERT INTO testTable VALUES('5')
             INSERT INTO testTable VALUES( (SELECT testName FROM testTable WHERE testId=1))---将id为1的记录执行insert
             INSERT INTO testTable VALUES( (SELECT MAX(testName) FROM testTable WHERE testId=1))---聚合函数保证返回记录只有一条即可
        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION
        PRINT '有语句插入失败,事务已回滚'
    END CATCH

    测试过提交和回滚事务正常。

    3.辅助语句

    ---删除表,还原自增从1开始
    TRUNCATE TABLE testTable
    
    ---显示插入自增列
    SET IDENTITY_INSERT testTable ON
    INSERT INTO testTable(testid,testName) VALUES(32,'5')
    SET IDENTITY_INSERT testTable off

    注意:

    1.set identity_insert只对当前会话生效。

    2.set identity_insert 表名 ON 设置后,必须显示指定Id(Insert into 里面要写入id的列),否则插入错误。如insert into table_name values('111')将报错。

       向自增ID插入指定值。 报错:“当 IDENTITY_INSERT 设置为 OFF 时,不能为表 ' ' 中的标识列插入显式值”。

       插入语句未显示指定ID。 报错:“仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表' '中的标识列指定显式值”。

  • 相关阅读:
    Redis的分布式锁
    Redis的雪崩、击穿、穿透
    psr规范
    Mysql的联(复)合索引
    nginx的location配置(二)
    nginx的location规则(一)
    easyswoole中队列的使用
    第三章 文件I/O
    移动语义及拷贝优化
    PHP对接tdzntech.com云平台电子免费券程序
  • 原文地址:https://www.cnblogs.com/CallmeYhz/p/5922154.html
Copyright © 2011-2022 走看看