zoukankan      html  css  js  c++  java
  • SQL SERVER 事务处理(一)

     
    1. 一个存储过程最好只有一个事务;多个事务既消耗资源,也容易产生错误;

    2. 创建事务和结束事务的时候最好有这样的判断:


    IF @@TRANCOUNT = 0
    BEGIN -- only if @@TRANCOUNT is 0, we do BEGIN TRAN
        BEGIN TRANSACTION
        
    SET @TransactionIsOurs = 1
    END        
    IF @TransactionIsOurs = 1
    BEGIN
        
    COMMIT TRANSACTION
        
    -- SET @TransactionIsOurs = 0
    END
    IF @TransactionIsOurs = 1 AND @@TRANCOUNT > 0
            
    ROLLBACK TRANSACTION

    3.  如果事务很长,可以在适当的位置多加几个错误判断:

    Code

         Note:@@Error必须直接跟在需要判断的sql后面,中间不能间隔其他语句,因为@@Error总是取最新执行的结果,所以最好还是使用Try...Catch...


    USE AdventureWorks;
    GO
    BEGIN TRANSACTION;

    BEGIN TRY
        
    -- Generate a constraint violation error.
        DELETE FROM Production.Product
            
    WHERE ProductID = 980;
    END TRY
    BEGIN CATCH
        
    SELECT 
            ERROR_NUMBER() 
    AS ErrorNumber,
            ERROR_SEVERITY() 
    AS ErrorSeverity,
            ERROR_STATE() 
    as ErrorState,
            ERROR_PROCEDURE() 
    as ErrorProcedure,
            ERROR_LINE() 
    as ErrorLine,
            ERROR_MESSAGE() 
    as ErrorMessage;

        
    IF @@TRANCOUNT > 0
            
    ROLLBACK TRANSACTION;
    END CATCH;

    IF @@TRANCOUNT > 0
        
    COMMIT TRANSACTION;
    GO
  • 相关阅读:
    ios入门笔记(创建隐式首选项,实现系统设置,实现文件系统存储)
    ios开发(表视图)
    Android上使用OpenglES2.0遇到的一点问题
    Android平台对H264视频硬解码
    Java GC机制和对象Finalize方法的一点总结
    JVM GC之一找出不可达对象并回收
    docker 使用Data Volume 共享文件
    sscanf函数用法详解
    va_start和va_end使用详解
    NDK 的helloworld步奏
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/1491340.html
Copyright © 2011-2022 走看看