SQL Server学习之路(十九) ——异常

在程序中,有时候完成一些Transact-SQL会出现错误、异常信息。如果我们想自己处理这些异常信息的话,需要手动捕捉这些信息。那么我们可以利用try catch完成。

     TRY…CATCH 构造包括两部分:一个 TRY 块和一个 CATCH 块。如果在 TRY 块中所包含的 Transact-SQL 语句中检测到错误条件,控制将被传递到 CATCH 块(可在此块中处理该错误)。

     CATCH 块处理该异常错误后,控制将被传递到 END CATCH 语句后面的第一个 Transact-SQL 语句。如果 END CATCH 语句是存储过程或触发器中的最后一条语句,控制将返回到调用该存储过程或触发器的代码。将不执行 TRY 块中生成错误的语句后面的 Transact-SQL 语句。

     如果 TRY 块中没有错误,控制将传递到关联的 END CATCH 语句后紧跟的语句。如果 END CATCH 语句是存储过程或触发器中的最后一条语句,控制将传递到调用该存储过程或触发器的语句。

     TRY 块以 BEGIN TRY 语句开头,以 END TRY 语句结尾。在 BEGIN TRY 和 END TRY 语句之间可以指定一个或多个 Transact-SQL 语句。CATCH 块必须紧跟 TRY 块。CATCH 块以 BEGIN CATCH 语句开头,以 END CATCH 语句结尾。在 Transact-SQL 中,每个 TRY 块仅与一个 CATCH 块相关联。

错误函数

TRY...CATCH 使用错误函数来捕获错误信息:

ERROR_NUMBER() 返回错误号。
ERROR_MESSAGE() 返回错误消息的完整文本。此文本包括为任何可替换参数(如长度、对象名称或时间)提供的值。
ERROR_SEVERITY() 返回错误严重性。
ERROR_STATE() 返回错误状态号。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。


错误消息存储过程


if (object_id('proc_error_info') is not null)

    drop procedure proc_error_info

go

create proc proc_error_info

as

    select 

        error_number() '错误编号',

        error_message() '错误消息',

        error_severity() '严重性',

        error_state() '状态好',

        error_line() '错误行号',

        error_procedure() '错误对象(存储过程或触发器)名称';

go


用异常处理错误信息

简单try catch示例


begin try

    select 1 / 0;

end try

begin catch

    exec proc_error_info; --调用错误消息存储过程

end catch

go


异常能处理的错误信息

简单try catch示例,无法处理错误


begin try

    select *  from student;

end try

begin catch

    exec proc_error_info;

end catch

go

简单try catch示例,不处理错误(不存在的表对象)

begin try

    select * from st;

end try

begin catch

    exec proc_error_info;

end catch

go

异常处理,能处理存储过程(触发器)中(不存在表对象)的错误信息

if (object_id('proc_select') is not null)

    drop procedure proc_select

go

create proc proc_select

as

    select * from st;

go

begin try

    exec proc_select;

end try

begin catch    

    exec proc_error_info;

end catch

go

以上就是异常处理的一些介绍,希望帮助到大家~

上一篇:SQL Server学习之路(十八)


下一篇:Java设计模式(九)----外观模式