我目前正在使用 Sybase ASE 12.5。我有下面的代码:
create procedure test_launcher_fail_wrapper
as
begin
select convert(numeric(2),1234345)
if @@error != 0
begin
select "SP failed to execute"
return 1
end
end
在这里,我试图将一个非常大的值/数量 (1234345) 转换为数字大小 2。这是不可能的,它会产生错误。
问题:
- @@error 在这里有用吗?我运行了这个 SP 但它从未进入 错误处理
- 如何错误处理这类场景?
最佳答案
我对待过程中的错误处理类似于应用程序中的错误处理——如果你有机会通过处理错误来贡献一些实际值(value),那么一定要这样做,但如果你真的无能为力帮助,那么你最好还是放手吧。
作为添加值的示例,我有一个或两个在错误消息中添加上下文信息的过程,例如与更新操作冲突的 ID 值列表。在这种特殊情况下,我知道 proc 的上游消费者将记录此错误,并且文本将可供运算符(operator)使用,运算符(operator)会在调试问题时发现此信息很有值(value)。我也知道虽然这种情况是一个真正的错误,但众所周知它会不时发生,因此格式化错误的努力是值得的。
关于tsql - 如何在存储过程中进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9582885/