zoukankan      html  css  js  c++  java
  • SQL Server 异常处理机制(Begin try Begin Catch) 摘录

    begin try
    --SQL 
    end try 
    begin catch 
    --sql (处理出错动作)
    end catch

    我们将可能会出错的sql 写在begin try...end try 之间,若出错,刚程序就跳到紧接着的begin try...end try 的beign catch...end catch中,执行beign catch...end catch错误处理SQL。try..catch 是可以嵌套的。在begin catch ...end catch中我们可以利用系统提供的下面四个函数得到出错信息:
    error_number 返回错误代码
    error_serverity 返回错误的严重级别
    error_state 返回错误状态代码
    error_message 返回完整的错误信息
    上面的四个函数在同一个begin catch ...end catch可以在多次使用,值是不变的。

    下面是一个简单的小例子。

    begin try
    select 2/0
    end try
    begin catch
    select error_number() as error_number ,
    error_message() as error_message,
    error_state() as error_state,
    error_severity() as error_severity
    end catch

    结果:
    -----
    error_number error_message error_state error_severity
    8134 遇到以零作除数错误。 1 16
    -------------------------------------------------------
    不受 TRY…CATCH 构造影响的错误 
    TRY…CATCH 构造在下列情况下不捕获错误: 
    严重级别为 10 或更低的警告或信息性消息。 
    严重级别为 20 或更高且终止会话的 SQL Server 数据库引擎任务处理的错误。 如果所发生错误的严重级别为 20 或更高,而数据库连接未中断,则 TRY…CATCH 将处理该错误。 
    需要关注的消息,如客户端中断请求或客户端连接中断。 
    当系统管理员使用 KILL 语句终止会话时。

    USE AdventureWorks;
    GO
    BEGIN TRY
        -- Generate a divide-by-zero error.
        SELECT 1/0;
    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;
    END CATCH;
    GO 
    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

    源文:

    https://blog.csdn.net/hejisan/article/details/52651660

  • 相关阅读:
    kendoGrid edit功能
    kendoGrid Event事件
    你不得不看的81条JavaScript编码小技巧,吐血整理,建议收藏
    H265编码视频流媒体播放器EasyPlayer.js支持9宫格视频同屏播放的写法
    EasyNTS 交叉编译海思系统下的可执行程序实现及测试过程
    EasyNTS在Go1.15版本下linux下无法编译的问题优化
    TSINGSEE青犀视频开发Python3行人分析功能运行一段时间后崩溃是什么原因?
    Mysql数据库导入excel和乱码问题
    聊聊5G:5G技术的落地能给视频娱乐、VR直播带来怎样的潜力?
    企业直播的核心点在哪里?未来将如何发展?
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/9288647.html
Copyright © 2011-2022 走看看