WEB开发网
开发学院数据库MSSQL Server SQL Server 2005的XML支持与异常处理 阅读

SQL Server 2005的XML支持与异常处理

 2007-05-15 09:27:37 来源:WEB开发网   
核心提示: BEGIN TRANSACTIONDELETE [Order Details] WHERE OrderID IN(SELECT OrderID FROM Orders WHERE CustomerID = 'ALFKI')IF @@ERROR <> 0BEGIN
BEGIN TRANSACTION
DELETE [Order Details] WHERE OrderID IN
(SELECT OrderID FROM Orders WHERE CustomerID = 'ALFKI')
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
DELETE Orders WHERE CustomerID = 'ALFKI'
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
DELETE Customers WHERE CustomerID = 'ALFKI'
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
PRINT 'I got here'
-- Normally do a COMMIT TRANSACTION here.
-- But I do a ROLLBACK so I don't truly delete my test data.
ROLLBACK TRANSACTION

展示一些示例代码,这些代码将在事务内部运行,依次删除客户的定单详情、定单以及客户本身。在每个 DELETE 语句之后,代码都会检查 @@ERROR 函数的值,以查看 DELETE 语句是否导致了错误。如果是,则回滚事务,停止执行代码,然后从批处理操作返回。

这是标准的事务管理,即如果发生错误,则中止事务,然后将数据的状态返回至其初始状态。请注意,如果一切顺利并且没有发生错误,我会打印一个成功消息,然后回滚事务。通常,我不会成功地进行回滚,因为这是一个测试事务,我实际上并不希望删除我的数据。

请注意,我必须遵循带有 @@ERROR 函数的每个语句,然后再使用 ROLLBACK 和 RETURN。该方法十分糟糕。假设编写一个包含许多查询(这些查询都需要检查)的事务。该过程可以通过 GOTO 语句来稍加简化,当然我并不是 GOTO 语句的提倡者,因为它们依旧未解决需要在查询操作之后立即检查 @@ERROR 函数的问题。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:SQL Server XML

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接