【问题标题】:Try..Catch SQL QuestionTry..Catch SQL 问题
【发布时间】:2011-02-23 16:25:27
【问题描述】:

有什么方法可以知道我的哪些更新或插入语句通过失败执行了 catch 块

【问题讨论】:

  • 请用哪种编程语言?
  • 一些数据库引擎允许使用类似 TRY...CATCH 的语句。如果我没记错的话,SQL Server 可以。你想要完成什么?您使用的是什么数据库引擎?
  • 大概你指的是存储过程/函数?如果您指出您正在使用的 RDBMS 平台会很有帮助。

标签: sql exception-handling try-catch


【解决方案1】:

首先创建一个表变量 在执行过程时将已运行的步骤或错误消息插入到表变量中。 在 catch 中回滚后,表变量仍然可用,然后使用它插入到您的日志记录表中。

【讨论】:

    【解决方案2】:

    如何用不同的 try-catch 块包围您的更新和插入语句?

    您还可以检查SELECT ERROR_MESSAGE(), ERROR_STATE() 以确定引发当前异常的原因

    【讨论】:

    • 并且每次都复制 catch 逻辑?
    • @KM:通常这只是几串代码。在我的应用程序中 - 5(每个 sp 重复 97 次)。为什么不?当然,如果它包含更多字符串,更多逻辑 - 复制是个坏主意。但是为什么不将它执行到额外的存储过程中呢?
    • 如果您使用临时表或任何其他导致程序重新编译的东西,您会增加系统的负载,因为每次运行程序时它都必须重新编译重复的代码,更不用说混乱了实际代码并使每个过程的时间都比它需要的长。
    【解决方案3】:

    Oracle PL/SQL 有异常处理:http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm

    否则您可以使用编程语言异常处理工具。

    【讨论】:

      【解决方案4】:

      堆栈转储可以包含一些信息,例如错误发生在哪一行,但这并不直接有用。

      最简单的可能是在每次查询之前设置一个变量,然后你可以在catch中检查它的值。

      【讨论】:

        【解决方案5】:

        想到的一件事是在事件查看器执行后立即将错误代码记录到事件查看器中。

        例如

        试试 错误代码=1 --查询1-- 错误代码=2 --查询2-- . . . 抓住 -- 记录 err_code 到事件查看器--

        然后通过查看事件查看器,您将看到最后一次成功查询的 err_code。

        希望对你有帮助

        【讨论】:

          【解决方案6】:

          试试这样的:

          Declare @Where varchar(50)
          
          BEGIN TRY
              SET @Where='1st update'
              UPDATE....
              SET @Where=NULL
          
              ...
          
              SET @Where='2nd update'
              UPDATE....
              SET @Where=NULL
          
              ...
          
              SET @Where='1 insert'
              INSERT....
              SET @Where=NULL
          
          
          END TRY
          BEGIN CATCH
              PRINT @Where
          
          END CATCH
          

          【讨论】:

            猜你喜欢
            • 2011-08-26
            • 1970-01-01
            • 2011-11-28
            • 1970-01-01
            • 2011-01-24
            • 2011-09-10
            • 2011-07-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多