2007-01-29

深入理解SQL Server 中的错误处理

来源: 本站收集整理 作者:佚名 评论 0 条
 

CREATE TABLE Transactions

(

      TranID SMALLINT IDENTITY(1,1) PRIMARY KEY,

      EntryDate SMALLDATETIME DEFAULT(GETDATE()),

      ParamValue CHAR(1), 

      ThrowError BIT

)

脚本中的两个字段值是ParamValue和ThrowError。这些字段将与我们要创建的程序中的输入参数相对应,并且我们将在提交事务的逻辑中用到它们。

一旦用来记录事务的表格预备就绪之后,我们就要开始创建程序了。这个程序中将有一个用来简单记录字符值和参量的参数,它将使我们能够指出程序中的错误。运行列表A中的语句可以创建这个程序。

CREATE PROCEDURE usp_TestTransaction



(

@ParamValue CHAR(1), 

@ThrowError BIT = 0



) 



AS



BEGIN

DECLARE @ErrorCode INT



BEGIN TRANSACTION



INSERT INTO Transactions (ParamValue, ThrowError)

VALUES(@ParamValue, @ThrowError)



IF @ThrowError = 1

RAISERROR ('A custom error has been thrown.', 16, 1)





SET @ErrorCode = @@ERROR





IF @ErrorCode <> 0

GOTO ErrorHandler

ELSE

BEGIN

COMMIT TRAN

RETURN(0)

END



ErrorHandler:

BEGIN

ROLLBACK TRANSACTION

RETURN(1)

END



END



GO

列表A

这个简单的存储过程展示了有效的错误处理必须具备的特征。首先,要明确定义一个事务。然后当一条记录插入事务表格之后,我们再检查参数@ThrowError的值。该参数显示是否有错误发生,再用函数RAISERROR来指出自定义的错误。当函数RAISERROR被调用时,变量@@ERROR的值显示的就是我们所提供错误的号码。

假如在存储过程中有错误发生,我们将重新运行所执行的事务。重新运行事务就意味着我们尝试插入事务表格的记录将会被移除,就像从来没有发生过一样。数据库的状态将与事务开始之前完全保持一致。

在这个例子中,你同样会注重到GOTO语句和ErrorHandler标签的使用。通常,使用GOTO语句在迭代编程语言中被认为是一种不好的编程习惯,但是在SQL Server 2000错误处理时,它们就非常有用了。不要害怕用GOTO语句来处理错误。

下面这个程序调用将出现错误,记录将不会被插入事务表格中:

DECLARE @ReturnCode INT

EXECUTE @ReturnCode = usp_TestTransaction @ParamValue = 'E', @ThrowError = 1

PRINT @ReturnCode

下面这个程序调用将不会出现错误,插入的记录将被提交到事务表格:


(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:分析MS SQL Server里函数的两种用法  
下一篇:SQLSERVER中,数据库同步的实现
    评论加载中…
共3页: 上一页 [1] 2 [3] 下一页
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号