3

我读过在 SQL Server 存储过程中使用 Try Catch 块可以占用大量服务器资源。我的问题是它使用了多少资源?

我目前在我的 sproc 进行大量数据更改时使用 Try Catch 块和事务,这对于防止不正确的数据进入数据库以及记录错误非常有用,但我想使用这种方法在我所有的存储过程中进行编程。

它有多大的不同?

4

1 回答 1

6

零。使用 TRY/CATCH 的代码消耗的资源与不使用 TRY/CATCH 的代码完全相同,唯一的区别是前者通常比后者更正确。事实上,TRY/CATCH 代码在出现错误时效率更高,因为代码流直接跳转到 catch 块,并避免运行请求/存储过程中的其余语句,只是在最后回滚。

只是为了记录,我不相信在每条语句之后编写检查@@ERROR的代码甚至是远程可行的替代方案。

我上大学的时候在书里读过

可以肯定的是,阅读不是指带有 TRY/CATCH 的 T-SQL 代码,而是指有或没有异常的 C++ 代码(JVM 或 IL)。回到黑暗时代,关于添加异常处理代码是否会对性能产生影响(是的,确实有)以及我们是否应该将其视为一个因素(不,我们不应该,具有异常处理的代码早已赢得了这一点)存在争议由于正确性而战斗)。但是从您的观点来看,这个讨论完全没有用:运行 T-SQL 的后端引擎是用异常处理编译的,您对此无能为力。同样,这对您的 T-SQL 代码的影响为 0。

于 2013-01-15T14:24:25.367 回答