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

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

 2007-05-15 09:27:37 来源:WEB开发网   
核心提示: SQL Server 2005 仍然支持 @@ERROR 函数,但它还包括了广为人知的 TRY/CATCH 模式,SQL Server 2005的XML支持与异常处理(5),TRY/CATCH 结构与 C# try/catch 结构的类似之处在于,在 try 块中捕获错误,以帮助您确定导致

SQL Server 2005 仍然支持 @@ERROR 函数,但它还包括了广为人知的 TRY/CATCH 模式。TRY/CATCH 结构与 C# try/catch 结构的类似之处在于,在 try 块中捕获错误,然后转移到 catch 块执行。(T-SQL 版本的 TRY/CATCH 没有 FINALLY 子句选项,但 C# 版本有。您可以通过捕获异常、不执行返回、然后使用适当的清除代码执行 catch 块来进行模拟。)因此,在某些情况下需要注意这一点,例如,在指定了 CURSOR 并在 T-SQL TRY 块中引发错误时打开该游标的情况。在这种情况下,应该在 CATCH 块中检查游标以查看它是否已打开;如果已打开,则应将其关闭并取消指定。

BEGIN TRY
BEGIN TRANSACTION
DELETE [Order Details] WHERE OrderID IN
(SELECT OrderID FROM Orders WHERE CustomerID = 'ALFKI')
DELETE Orders WHERE CustomerID = 'ALFKI'
DELETE Customers WHERE CustomerID = 'ALFKI'
PRINT 'committing deletes'
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
RETURN
END CATCH

看到上面代码中的 TRY/CATCH 结构后,您可能会震惊于它与 @@ERROR 技术相比是多么简洁。请注意,对于 TRY/CATCH 块,不需要重复检查是否有错误,因而减少了代码行数同时也减少了出现编码错误的地方。

上面代码中的代码试图开始一个事务,执行一系列 DELETE 语句,然后提交该事务。(另请注意,在我的示例中,我没有提交事务而是回滚该事务,因此实际上并没有删除数据。实际上,这应该是一个 COMMIT TRAN 语句。)

可以在 TRY/CATCH 结构中访问多个内置函数,以帮助您确定导致代码进入 CATCH 块的原因。例如,可以在 CATCH 块内部添加以下语句,返回有关该错误的信息:

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

Tags:SQL Server XML

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