当前位置: 首页 > 知识库问答 >
问题:

你能捕获错误消息中的坏t-sql吗

姬衡
2023-03-14

如果我运行如下sql语句:

SELECT 1/0;

有没有一种方法可以捕捉到“选择1/0;”在错误消息中?下面没有给出失败的SQL:

开始尝试选择1/0;END TRY BEGIN CATCH SELECT ERROR _ NUMBER()AS ERROR NUMBER,ERROR _ SEVERITY()AS ERROR SEVERITY,ERROR_STATE() AS ErrorState,ERROR _ PROCEDURE()AS ERROR PROCEDURE,ERROR_LINE() AS ErrorLine,ERROR _ MESSAGE()AS ERROR MESSAGE;末端捕捉;去

另外,我想看看能否避免在每个语句中使用try catch。我有一个SP,它在TRY和CATCH语句之间执行大量SQL语句。我想知道在尝试的众多SQL语句中,哪一个失败了...接住滑轮。

到目前为止,我所发现的只是给出了错误消息的详细信息,但没有给出失败的SQL。

共有3个答案

路奇
2023-03-14

您可以使用行号进行相同的操作,但是如果您想检查哪个语句有问题,那么您必须定义语句号来检查编号并在这样的变量中设置相同的编号。

Declare @StmNo as int
BEGIN TRY
    set @StmNo=1
    SELECT GETDATE();
    set @StmNo=2
    SELECT 1/0;
END TRY 
BEGIN CATCH 
        SELECT 
            @StmNo AS StatementNumber,
            ERROR_NUMBER() AS ErrorNumber, 
            ERROR_SEVERITY() AS ErrorSeverity,
            ERROR_STATE() AS ErrorState, 
            ERROR_PROCEDURE() AS ErrorProcedure, 
            ERROR_LINE() AS ErrorLine, 
            ERROR_MESSAGE() AS ErrorMessage; 
        END CATCH; 
        GO 
万俟铭
2023-03-14

如果存储过程包含大量语句,则在存储过程的开头设置日志变量总是好的。您可以调整此变量的值,以确保是否要记录步骤。在您当前的情况下,您可以将其设置为1并开始记录所有/必要的步骤。这将帮助您找出执行的内容以及错误发生的位置。

例如:DECLARE @bLog BIT = 0 -当您不想记录时为默认值

设置@bLog=1,如果(@bLog=2)开始------在这里添加日志,从前面步骤执行的结果备份--等等。结束

谭越
2023-03-14

您可以利用表变量不回滚的事实。在每个stament之后,在一个用于记录的表变量中插入一个成功行。

如果proc成功,则不需要从表变量返回任何内容。但是,如果它碰到了catch块,则可以回滚事务并重新运行表变量中的select,或者更好地将该信息插入日志表。如果您的proc设置了很多变量,我也会将这些值记录在这个表中,以便您可以看到proc失败时的值。通过将其放入日志记录表中,您可以记录proc失败的所有时间,因此,如果它在周五晚上失败,并在周末失败了几次,但不是每次都失败,那么您就有了关于什么工作的数据,以及失败时的变量,以了解发生了什么。如果您使用动态sql,这尤其有用,因为您也可以记录生成的sql语句。

 类似资料:
  • 考虑下面的代码: 我想做的是用我应该从JSON响应中获得的错误消息捕获错误。我希望在我的第二个console.log中得到一个响应,但是不知何故,响应在第一个console.log.我如何在第一个实例中得到我想要的响应? 此外,为什么响应在第一个实例中给我“ok”,即使应用编程接口密钥不存在? 为什么我必须返回rsp.json()才能在第二个实例中获得正确的JSON,而响应应该已经是JSON格式的

  • 我想检查在页面之间导航时是否收到错误消息。当错误消息出现时,测试将被终止并进行报告。为此,我使用了以下与站点上的错误消息相关的元素。

  • 问题内容: 为了确保来自我的模块的错误消息是有用的,我想查看assertRaises()捕获的所有错误消息。今天,我对每个assertRaises()都这样做,但是由于测试代码中有很多代码,因此变得非常乏味。 如何打印所有assertRaises()的错误消息?我研究了http://docs.python.org/library/unittest.html上的文档,但没有弄清楚如何解决它。我可以以

  • 我正在尝试运行MySQL PDO查询。我不知道为什么我会得到一个致命的错误。我查过其他帖子,但他们的答案似乎并不能解决我的。 脚本连接到数据库很好。用户名和密码是正确的,我已经在下面的脚本中删除了它们。 我的输出:

  • 问题内容: 有没有办法捕获in 中发生的错误并可能将其标记为页面中的错误? 举个简单的例子,假设我试图在一个不存在的HTML控件上绑定一个事件,我的浏览器抛出一个错误: 现在,如果我希望相同的错误无法通过我的selenium测试,并且浏览器上显示的消息将显示为错误消息。 可以做这样的事情吗? 问题答案: 将此脚本放在页面上,然后在Selenium中检查JSError:

  • 我有一个使用axios进行ajax调用的操作,每当axios返回错误时,它就会被axios catch函数捕获,因此我想知道是否有可能将相同的错误抛出到dispatch catch函数。 我尝试//抛出新错误(“内部测试错误”);从axios内部捕获(错误),但dispatch似乎无法捕获错误 vuex存储上的操作代码 关于我在vue组件上的方法 我希望axios抛出catch error,该错误