【问题标题】:How to Try-Catch or return a success flag when Transaction commits or rollbacked - SQL Server如何在事务提交或回滚时尝试捕获或返回成功标志 - SQL Server
【发布时间】:2016-10-12 09:40:05
【问题描述】:

我在存储过程中有一个 SQL 事务,我想知道如何在事务成功提交或在任何时候失败的情况下返回成功消息,即。已回滚,我想在 MVC C# 的代码中使用该标志。

【问题讨论】:

    标签: sql-server stored-procedures transactions


    【解决方案1】:

    下面的代码可能会对你有所帮助,

    BEGIN TRY
      BEGIN TRANSACTION
        -- sql update\delete statement goes here 
     COMMIT TRANSACTION    
    END TRY
    
    BEGIN CATCH 
      IF (@@TRANCOUNT > 0)
       BEGIN
          ROLLBACK TRANSACTION
          PRINT 'Error ...'
       END 
        SELECT
            ERROR_NUMBER() AS Error#,        
            ERROR_MESSAGE() AS ErrorMsg
    END CATCH
    

    【讨论】:

    • 所以我必须在我的代码中使用这个 Error 和 ErrorMsg ,为此我必须将它们声明为输出参数,如“Error varchar(20)”和 ErrorMsg varchar(20) 以防万一成功返回哪里.??
    • 所以我必须在我的代码中使用这个 Error 和 ErrorMsg ,为此我必须将它们声明为输出参数,如“Error varchar(20)”和 ErrorMsg varchar(20) 以防万一成功返回哪里.?? @Aditya。
    • forums.asp.net/t/…此链接可能对您有所帮助...
    • @ManojKargeti,您可以使用OUTPUT 参数或结果集来返回成功/失败消息。对于结果集,您可以在示例中的 COMMIT 之后添加 SELECT 0 AS Error#, N'Success' AS ErrorMsg'。结果集应该具有相同的列名和数据类型以实现干净的接口。或者,您可以在CATCH 之后编写一个SELECT,以返回在TRYCATCH 块中分配的局部变量值,这样就只需要一个SELECT
    • 结果集应该具有相同的列名和数据类型,以获得干净的界面。 @DanGuzman 你能否举个例子说明它在 SELECT ERROR_NUMBER() AS Error#, ERROR_MESSAGE() AS ErrorMsg.. 中出现错误 'invalid Column name'..
    【解决方案2】:

    你可以写成:

    声明@success 位 = 1

    开始交易 开始尝试 --这里是脚本的主要内容 结束尝试

    开始捕捉 回滚事务 设置@成功 = 0 结束捕获

    如果(@成功 = 1) 开始 提交事务 结束

    【讨论】:

    • 能否请您举一个更新示例以便更好地理解,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多