bal*_*569 -3 sql raiserror sql-server-2008
我需要使用RAISERROR来抛出一条消息(弹出消息)并提交该事务.有什么选择吗?
对于严重性18,事务得到了回滚.我已将严重性更改为10并尝试了
RAISERROR('Your Reference Number is %s',10,0,@param);
Run Code Online (Sandbox Code Playgroud)
这但它提交了交易,但没有显示消息.我需要的是必须抛出消息并且必须提交事务
有什么建议吗?
不要使用异常来传回"OK"消息.你不会在ac#或java程序中.例外意味着"因为SHTF我已经流产"
您将使用thsi返回有意义的数据
SELECT 'Your Reference Number is ' + @param
Run Code Online (Sandbox Code Playgroud)
在一个典型的模板(从我的回答嵌套存储过程包含TRY CATCH ROLLBACK模式?)
SET XACT_ABORT, NOCOUNT ON
BEGIN TRY
BEGIN TRANSACTION
[...Perform work, call nested procedures...]
COMMIT TRANSACTION
SELECT 'Your Reference Number is ' + @param
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION
RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
Run Code Online (Sandbox Code Playgroud)
严重性大于10的RAISERROR将被ADO.Net客户端视为异常.根据您的调用上下文的外观,这可能会或可能不会回滚事务.如果在客户端使用SqlTransaction或TransactionScope,或者在服务器端使用BEGIN TRY/BEGIN CATCH块,则可能会回滚事务.重点是RAISERROR既不提交也不回滚交易,是您自己的代码回滚或提交,我们无法知道您在帖子中做了什么.
严重性低于10的RAISERROR将被视为信息性消息,不会导致异常.请参阅数据库引擎错误严重性.这可能就是为什么你说'它没有显示信息'(无论这意味着什么).客户端框架以不同方式处理信息性消息,例如ADO.Net将SqlConnection.InfoMessage在连接上引发事件但不会引发异常.您可能没有在此应用程序中为此事件设置任何内容,而您的代码只是忽略了信息消息.例如,如何使用InfoMessage事件请参阅连接事件(ADO.NET)