专栏首页跟着阿笨一起玩NETSQL中存储过程中使用事务,并且加入异常处理机制.

SQL中存储过程中使用事务,并且加入异常处理机制.

--存储过程中使用事务,并且加入异常处理机制.
-- =============================================
CREATE PROCEDURE [dbo].[UP_Orders_Import]
AS
BEGIN
	BEGIN TRAN  --开启事务
		BEGIN TRY  
			
			SELECT 1/0
		
			COMMIT TRAN  --提交事务
		END TRY  
    BEGIN CATCH  
        DECLARE  
            @ErrorMessage NVARCHAR(4000) ,  
            @ErrorNumber INT ,  
            @ErrorSeverity INT ,  
            @ErrorState INT ,  
            @ErrorLine INT ,  
            @ErrorProcedure NVARCHAR(200) ;  
   
        SELECT  
                @ErrorNumber=ERROR_NUMBER(),@ErrorSeverity=ERROR_SEVERITY(),  
                @ErrorState=ERROR_STATE(),@ErrorLine=ERROR_LINE(),  
                @ErrorProcedure=ISNULL(ERROR_PROCEDURE(),'-') ;  
        SELECT  
                @ErrorMessage=N'Error %d, Level %d, State %d, Procedure %s, Line %d, '  
                +'Message: '+ERROR_MESSAGE() ;  
        RAISERROR   
        (  
		   @ErrorMessage,   
		   @ErrorSeverity,   
		   1,                 
		   @ErrorNumber,    -- parameter: original error number.  
		   @ErrorSeverity,  -- parameter: original error severity.  
		   @ErrorState,  -- parameter: original error state.  
		   @ErrorProcedure, -- parameter: original error procedure name.  
		   @ErrorLine       -- parameter: original error line number.  
		) ;  
        ROLLBACK TRAN  --回滚事务
    END CATCH  
END

  sql事务注意点:

        DECLARE @Referenznummer NVARCHAR(MAX)
        SET @Referenznummer = '934590-AE1023-1'
        
        BEGIN TRAN
        BEGIN TRY	
        
          DECLARE @returnValue INT  
          SET @returnValue = 11110
        
             --(1)、变量在事务中是不会进行回滚的;默认值虽然是11110
            SET @returnValue = 1  
          
        
            IF (
                NOT EXISTS ( SELECT 1
                             FROM   tbOrder
                             WHERE  Referenznummer = @Referenznummer )
               ) 
                BEGIN  
				
				    --(2)、出现异常后,直接终止下面的代码,跳转到CATCH代码块中.
                    SELECT  10 / 0
				    --begin
                    SELECT  @@ERROR
                    SELECT  100
                    IF (@@error <> 0)   --此语句在try catch中是捕获不到的。
                        BEGIN  
                            SET @returnValue = 0  
                        END  
					--end
                END  
            ELSE 
                BEGIN  
                    SET @returnValue = 3  
                END
            COMMIT TRAN  
        END TRY		
        BEGIN CATCH	
            PRINT 'error'
            --SET @returnValue = 0  
            ROLLBACK TRAN
        END CATCH
    
        SELECT  @returnValue
        --RETURN @returnValue  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SqlServer查看死锁的存储过程

    跟着阿笨一起玩NET
  • C# 如何获取Url的host以及是否是http

    参考资料:https://sites.google.com/site/netcorenote/asp-net-core/get-scheme-url-host

    跟着阿笨一起玩NET
  • EF Linq中的左连接Left Join查询

    linq中的join是inner join内连接,就是当两个表中有一个表对应的数据没有的时候那个关联就不成立。

    跟着阿笨一起玩NET
  • php 换行符问题

    公司有个业务需要用户上传csv文件,里面的内容以逗号(,)分隔 ,然后每一行代表一条数据,业务代码读取数据根据业务规则入库。 有用户反馈,自己上传的csv文件“...

    千往
  • 你知道有几种方式来判断JS的数据类型吗?

    因为JavaScript是一门弱引用类型的语言,所以在开发过程中我们常常会遇到 “我定义的这个变量是什么数据类型?”这种类似的问题,所以今天我们来看看在JS中一...

    用户2802329
  • 7、微信小程序免费视频教程之模块化

    <text id="item-{{id}}"">{{content}}</text>

    用户1272076
  • 现在该用 Java 12,还是坚持 Java 11?

    距离 Java 11 的正式发布已过去一个多月,而 Java 12 也正在赶来的路上,现在 Java 8 仍然是开发者的主流选择,而 Java 11 是 Jav...

    Java技术栈
  • [python从入门到放弃]用pyautogui批量输入表单

    STEP2:安装pyautogui,命令行输入pip install pyautogui

    周星星9527
  • 自动输入表单-以录入学生平时成绩到教务系统为例

    STEP2:安装pyautogui,命令行输入pip install pyautogui

    周星星9527
  • 【win10】win10值不值得升级?

    距离2015年7月win10发布已经过去了一年了,当时发布时宣传的很厉害,并且明确表明这是最后一代windows操作系统,可见微软对于这款系统的信心。对于消费者...

    后端技术漫谈

扫码关注云+社区

领取腾讯云代金券