假设Asp.Net应用程序调用过程dbo.ApprovePost并且@@ ERROR包含大于0的值,则将执行以下代码:
CREATE PROCEDURE dbo.ApprovePost
…
IF @@ERROR > 0
BEGIN
RAISERROR(‘Approval of post failed’, 16, 1)
ROLLBACK TRANSACTION ApprovePost
RETURN 99
END
COMMIT TRANSACTION ApprovePost
a)我对存储过程知之甚少,但我认为当RAISERROR引发错误时,RAISERROR之后没有代码会被执行,因为程序会在错误出现时退出吗?!
b)我假设RAISERROR函数会将错误信息返回给调用Asp.Net应用程序?
c)如果是这样,那么为什么过程还需要返回值99来表示失败(BTW-我假设这个值被返回给调用的Asp.Net应用程序)?
d)为什么价值99?为什么不是100或任何其他值?
感谢名单
答案 0 :(得分:2)
调用严重性级别高于10的RAISERROR
,在您的情况下为16,在ADO.NET中导致SqlException
(严重级别10或更低级别仅为信息性消息),因此返回99除非捕获到异常并且您仍然可以访问SqlCommand
对象上的返回参数(不确定它是否可访问 - 尚未测试),否则没有意义。
为什么99?这显然是调用代码的一些“神奇”值。