【发布时间】:2012-04-19 16:57:10
【问题描述】:
我有一个存储过程调用了其他几个,其中一个由于重复的主键而无法将行插入表中
引发的错误是 消息 2627,级别 14,状态 1,程序 ...,第 16 行 违反 PRIMARY KEY 约束“...”。无法在对象“...”中插入重复键。
我通过 VBA 从 Excel 电子表格中调用 this,并使用通常的 On Error 处理,但例程在没有触发错误的情况下静默失败。
我不确定这是由于存储过程中的存储过程还是错误的严重性太低。
有没有人经历过这样的事情并可以提出解决方法?
我最初的尝试是在存储过程调用周围放置一个 BEGIN TRY / BEGIN CATCH 块,CATCH 以更高的严重性运行 RAISERROR,但它似乎没有被触发。
谢谢
【问题讨论】:
-
我会查看您的 vba 代码。获取正在发送的确切 sql 代码并检查您是否通过 ssms 收到错误。在代码中添加断点并逐步执行。
-
顶级存储过程如何处理来自被调用存储过程的错误?它是否退出并显示错误消息?在这里显示一些实际代码(VBA/存储过程)可能会有所帮助。
-
@TimWilliams 最初它没有做任何特别的事情——我认为它会冒泡。我尝试对调用的存储过程进行捕获,但即使从 SSMS 运行时它也不会触发,我可以在输出窗口中清楚地看到错误。
-
@RussellHart - 我已经做到了 :) SSMS 显示一个错误,该错误会终止存储过程中的存储过程。主要过程继续进行(我猜错误还不够严重)。 VBA 代码运行良好,完全没有错误。我最初只是执行 DBCmd.Execute,但将其更改为 SET rs = DBCmd.Execute,以防它需要返回记录集以监视错误。不过还是没有运气:(
标签: sql-server excel vba error-handling