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 块内部添加以下语句,返回有关该错误的信息:
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接