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
  • 相关阅读:
    我家笨笨爱上了小笨
    Outlook备份全攻略
    中国男篮有希望!评中国vs西班牙之战
    男为己悦者穷
    转:15则笑话
    看看你家乡在全国的位置2008最新各省市的GDP和人均收入排名
    锦江之星 .VS. 如家HOME INN
    学会心理养生
    另眼看北京奥运
    南方餐馆与北方餐馆
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/1491340.html
Copyright © 2011-2022 走看看