【问题标题】:How to ignore errors from nested stored procedures in a SQL Server 2000 procedure called from ASP如何忽略从 ASP 调用的 SQL Server 2000 过程中嵌套存储过程的错误
【发布时间】:2011-05-10 20:31:24
【问题描述】:

我正在开发一个带有 SQL Server 2000 数据库的“经典”ASP 应用程序。

我们有一个存储过程(我们称之为 SP0),它调用其他存储过程(比如 SP0.1、SP0.2 ...),这些存储过程本身又调用另一个名为 SPX 的存储过程。

当使用RAISERROR() 出现问题时,所有这些过程都会产生错误。

我们希望能够使用参数@errorsInResultSet 启动 SP0,这将改变它的行为:而不是像目前那样“重新引发”错误,每个子过程都会将错误记录在临时表中#detectedProblems 最后返回。

向临时表添加错误不是问题,但我不知道如何忽略嵌套存储过程产生的错误。

到目前为止我已经这样做了:

EXEC @rc = [SP0.1] @errorsAsResultSet = @errorsAsResultSet  
    IF (0 <> @@ERROR) OR (0 <> @rc)
    BEGIN
        IF (@errorsAsResultSet <> 0x1)
        BEGIN
            RAISERROR('SP0.1: Error for table Tests in db %s.%s', 16, 1, @@SERVERNAME, @db)
        END
        GOTO FAILURE
    END

这工作正常,但它仍然会从最低 SPX 生成错误,这会阻止它在经典 ASP 中由 ADO 执行。

如何忽略错误?

【问题讨论】:

    标签: asp-classic error-handling sql-server-2000


    【解决方案1】:

    如果您对记录的错误感到满意并且可以安全地继续,您可以在 SP 调用之前的行上使用 ON ERROR RESUME NEXT。这将防止页面抛出错误。

    要在页面稍后打开错误,您可以使用ON ERROR GOTO 0

    【讨论】:

    • 但我的问题更多的是在 SQL Server 端。即使我忽略了来自 ASP 的错误,看起来我也无法访问由 SP 生成的记录集 ...
    【解决方案2】:

    最后,看起来没有办法从调用存储过程中“隐藏”SP0.1、SP0.2中PRINTRAISERROR语句生成的消息,这意味着执行总是被 ASP 解释为“错误”

    最后,我重写了一个新的存储过程,带有一个特殊的参数来配置如何报告错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多