简而言之,我想知道以下哪一项是更好的做法:
- 将我的代码封装在
TRY/CATCH
block 中并显示错误消息 - 编写自己的检查并显示自定义错误消息
据我所知,TRY/CATCH
block 并未处理所有类型的错误。在我的情况下,这不是问题。
我正在构建执行特定存储过程的动态 SQL。我可以自己进行检查,例如:
- 即将执行的过程是否存在
- 是否提供了所有参数
- 可以正确转换所有值
或者只是像这样封装语句:
BEGIN TRY
EXEC sp_executesql @DynamicSQLStatement
SET @Status = 'OK'
END TRY
BEGIN CATCH
SET @Status = ERROR_MESSAGE()
END CATCH
如果我自己进行检查(例如性能差异)有什么区别吗?或者我应该将这项工作留给服务器?
我问这个问题的原因是因为在某些语言(如 JavaScript)中,使用 try/catch
block 被认为是不好的做法。
最佳答案
通常,自己检查这些事情比让 SQL Server 捕获异常更好。正如我在这些帖子中所演示的,异常处理并不便宜:
根据您期望的架构、数量、并发性和故障频率,您的临界点可能会有所不同,因此在非常高的规模下,这可能并不总是绝对最有效的方法。但是,除了在大多数情况下您的情况会更好之外,编写自己的错误处理和预防(虽然需要时间)可以让您完全了解所有错误情况。
话虽如此,您仍然应该将 TRY/CATCH
作为故障保护,因为总有可能出现您未预测到的异常,并且让它优雅地爆炸比扔弹片要好得多无处不在。
关于sql - TRY/CATCH block 与 SQL 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126718/