zoukankan      html  css  js  c++  java
  • 关于SQLServer2005的学习笔记—异常捕获及处理

    转自:http://blog.csdn.net/baoqiangwang/article/details/5395874

    SQLServer2005 提供了类似于 C# 和 C++ 语言中的异常处理的错误处 理机制。

    Transact-SQL 语句组可以包含在 TRY 块中。如果 TRY 块内部发生错误,则会将控 制传递给 CATCH 块中包含的另一个语句组。

    相关错误消 息如下:

    ERROR_NUMBER() 返回错误号。

    ERROR_SEVERITY() 返回严重性。

    ERROR_STATE() 返回错误状态号。

    ERROR_PROCEDURE() 返回出现错误的存储过程或 触发器的名称。

    ERROR_LINE() 返回导致错误的例程中的行 号。

    ERROR_MESSAGE() 返回错误消息的完整文本。

    -- 让我们看看 SQLServer2000 下的错误捕获,对于某些错 误实际上是无法捕获的

    DECLARE @ErrNum INT,@RowCount INT;

    -- 能够捕获的 0 做除数错误

    SELECT 1/0;

    SET @ErrNum=@@error;

    SET @RowCount=@@rowcount;

    PRINT 'Encount ERROR';

    PRINT @ErrNum

    PRINT @RowCount

    -- 不能被捕获的数据转换错误

    SELECT 'A'+1

    SET @ErrNum=@@error;

    SET @RowCount=@@rowcount;

    PRINT 'Encount Serious ERROR';

    PRINT @ErrNum

    PRINT @RowCount

    -- 创建一张通用日志表,以捕 获代码执行过程中的相关错误

    CREATE TABLE LogTable

    (

             ID             INT IDENTITY (1,1) NOT NULL,

             ErrorNumber    INT,

             ErrorMessage   VARCHAR(1000),

             ErrorSeverity  INT,

             ErrorState     INT,

             ErrorLine      INT,

             ErrorProcedure VARCHAR(128)

    );

    -- 创建一个存储过程,以进行 错误捕获

    CREATE PROCEDURE TestTryCatchProc

    AS

    -- 相关业务逻辑

    BEGIN TRY

    SELECT 1/0;

    END TRY

    -- 相关错误捕获

    BEGIN CATCH

        PRINT 'Error Numberv' + CAST(ERROR_NUMBER() AS VARCHAR(10));

        PRINT 'Error Serverity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10));

        PRINT 'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10));

        PRINT 'Error Procedure: ' + ERROR_PROCEDURE();

        PRINT 'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10));

        PRINT 'Error Message: ' + ERROR_MESSAGE();

             INSERT INTO LogTable(ErrorNumber,ErrorSeverity,ErrorState,ErrorProcedure,ErrorLine,ErrorMessage)

            VALUES(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE())

        -- 此处可以先对相关错误进行 修正

    END CATCH;

    -- 执行相关存储过程,并查询 日志表,同时与 系统消息表进行对比

    EXEC TestTryCatchProc

    SELECT * FROM LogTable

    SELECT * FROM sys.messages WHERE message_id=8134 AND language_id=2052

  • 相关阅读:
    并发编程(一) 操作系统基础和进程
    操作系统发展史
    网络编程(三) 大文件传输与UDP通信
    网络编程(二)-socket套接字
    网络编程(一)
    排序算法之冒泡法
    第二章 算法基础 思考题2-1
    查找算法之二分查找
    排序算法之归并排序
    排序算法之插入排序
  • 原文地址:https://www.cnblogs.com/allenhua/p/3917631.html
Copyright © 2011-2022 走看看