Asp classic 如何在从ASP.NET调用的SQL Server 2000过程中忽略嵌套存储过程中的错误
我正在使用SQLServer2000数据库开发一个“经典”ASP应用程序 我们有一个调用其他存储过程(比如SP0.1、SP0.2…)的存储过程(我们称之为SP0),这些存储过程本身调用另一个名为SPX的存储过程 当使用Asp classic 如何在从ASP.NET调用的SQL Server 2000过程中忽略嵌套存储过程中的错误,asp-classic,error-handling,sql-server-2000,Asp Classic,Error Handling,Sql Server 2000,我正在使用SQLServer2000数据库开发一个“经典”ASP应用程序 我们有一个调用其他存储过程(比如SP0.1、SP0.2…)的存储过程(我们称之为SP0),这些存储过程本身调用另一个名为SPX的存储过程 当使用RAISERROR()出现问题时,所有这些过程都会生成错误 我们希望能够使用参数@errorsInResultSet启动SP0,该参数将改变SP0的行为:每个子过程将在临时表#detectedProblems中记录错误,并在最后返回 向临时表中添加错误不是问题,但我不知道如何忽略嵌
RAISERROR()
出现问题时,所有这些过程都会生成错误
我们希望能够使用参数@errorsInResultSet
启动SP0,该参数将改变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
EXEC@rc=[SP0.1]@errorsAsResultSet=@errorsAsResultSet
如果(0@@ERROR)或(0@rc)
开始
IF(@errorsAsResultSet 0x1)
开始
RAISERROR('SP0.1:数据库%s.%s',16,1,@@SERVERNAME,@db中的表测试出错)
结束
转到失败
结束
这工作正常,但它仍然会从最低的SPX生成错误,这会阻止它在经典ASP中由ADO执行
如何忽略错误?如果您很高兴记录了错误,并且可以安全地继续,则可以在SP调用之前的线路上使用“错误恢复下一步”。这将防止页面抛出错误
要在页面中稍后打开错误,可以使用
on ERROR GOTO 0
最终,似乎无法从调用存储过程中“隐藏”SP0.1、SP0.2中的PRINT
或RAISERROR
语句生成的消息,这意味着执行始终被解释为“错误”通过ASP
最后,我用一个特殊的参数重写了一个新的存储过程,以配置如何报告错误。但我的问题更多地出现在SQL Server端。即使我忽略了ASP的错误,看起来我也无法访问SP生成的记录集。。。