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
  • 相关阅读:
    PS软件之,快速的修改图片你的尺寸
    想的太多,做的太少
    Java-Junit 的Hello world
    Java-hibernate的映射文件
    工作思路
    Spring入门Hello World
    PHP 进制问题
    Java-hibernate的Hello World
    PHP获得header头进行分析
    动软模板使用教程
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/1491340.html
Copyright © 2011-2022 走看看