• SQL SET XACT_ABORT各种用法及显示结果


    /*
        SET XACT_ABORT各种用法及显示结果
        
      默认为SET XACT_ABORT OFF,没有事务行为。
        
      SET XACT_ABORT ON分为两种:
     
      1、总体作为一个事务,整体提交或整体回滚,格式为: 
            SET XACT_ABORT ON
            BEGIN TRAN
                --要执行的语句    
            COMMIT TRAN
            GO
    
      2、每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚,格式为: 
            SET XACT_ABORT ON
            BEGIN
                --要执行的语句
            END
            GO
    */
     
    
    CREATE TABLE student
    (    
            stuid int NOT NULL PRIMARY KEY,
            stuname varchar(50)
    )
    CREATE TABLE score 
    (
            stuid int NOT NULL REFERENCES student(stuid),
            score int
    )
    GO
     
    --插入测试数据
    INSERT INTO student VALUES (101,'zhangsan') 
    INSERT INTO student VALUES (102,'wangwu') 
    INSERT INTO student VALUES (103,'lishi') 
    INSERT INTO student VALUES (104,'maliu') 
    GO
     
    ---------------测试事务提交------------------
    
    --只回滚错误行,错误行之后的语句还继续执行
    SET XACT_ABORT OFF
    BEGIN TRAN
        INSERT INTO score  VALUES (101,90)
        INSERT INTO score VALUES (102,78) 
        INSERT INTO score VALUES (107,76) /* Foreign Key Error */ 
        INSERT INTO score VALUES (103,81) 
        INSERT INTO score VALUES (104,65) 
    COMMIT TRAN
    GO
    /*
    stuid       score
    ----------- -----------
    101         90
    102         78
    103         81
    104         65
     
    (4 row(s) affected)
    */
     
    --DELETE FROM dbo.score
    
    --总体做为一个事务,事务终止并全部回滚
    
    SET XACT_ABORT ON
    BEGIN TRAN
        INSERT INTO score  VALUES (101,90)
        INSERT INTO score VALUES (102,78) 
        INSERT INTO score VALUES (107,76) /* Foreign Key Error */ 
        INSERT INTO score VALUES (103,81) 
        INSERT INTO score VALUES (104,65) 
    COMMIT TRAN
    GO
    
    /*
    stuid       score
    ----------- -----------
    (0 row(s) affected)
    */
     
    /*
        每个语句作为一个事务,事务在错误行终止,
        错误行回滚,错误行之前的不回滚,
        错误行之后的不执行
    */
    
    SET XACT_ABORT ON
    BEGIN
        INSERT INTO score  VALUES (101,90)
        INSERT INTO score VALUES (102,78) 
        INSERT INTO score VALUES (107,76) /* Foreign Key Error */ 
        INSERT INTO score VALUES (103,81) 
        INSERT INTO score VALUES (104,65) 
    END
    GO
    /*
    stuid       score
    ----------- -----------
    101         90
    102         78
    (2 row(s) affected)
    */
    
    --DROP TABLE score,student
    
    GO
     
    

      

  • 相关阅读:
    如何入门深度学习
    机器学习之激活函数
    轻量化模型之SqueezeNet
    聚类算法之MeanShift
    目标检测之RefineDet
    语义分割之RefineNet
    数学基础之高斯核函数
    目标检测之人脸识别
    梯度下降算法及优化方法
    机器学习高阶训练营知识点一览
  • 原文地址:https://www.cnblogs.com/intheway/p/6784657.html
Copyright © 2020-2023  润新知