sql-server - 如何从 VBA 中的存储过程中的存储过程中捕获错误

标签 sql-server excel vba error-handling

我有一个调用其他几个存储过程的存储过程,其中一个由于重复的主键而无法将行插入到表中

引发的错误是 消息 2627,级别 14,状态 1,程序 ...,第 16 行 违反 PRIMARY KEY 约束“...”。无法在对象“...”中插入重复键。

我通过 VBA 从 Excel 电子表格中调用此函数,并进行了通常的 On Error 处理,但该例程在未触发错误的情况下静默失败。

我不确定这是存储过程中的存储过程还是错误的严重性太低。

有没有人经历过这样的事情并且可以建议解决方法?

我最初的尝试是在存储过程调用周围放置一个 BEGIN TRY/BEGIN CATCH block ,CATCH 以更高的严重性运行 RAISERROR,但它似乎没有触发。

谢谢

最佳答案

在外部过程中添加一个显式事务。 BEGIN TRANSACTION 在开头,COMMIT TRANSACTION 在结尾。

然后在开始事务之前添加 SET XACT_ABORT ON;。这将解决批处理失败的问题。

在出现错误的内部过程之后,检查语句级错误的错误值,例如

IF @@ERROR <> 0 
BEGIN
    ROLLBACK TRANSACTION; 
    RETURN 1; 
END

关于sql-server - 如何从 VBA 中的存储过程中的存储过程中捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10233036/

相关文章:

delphi - 从 Delphi 修改 Excel 形状

excel - 从一个范围到另一个范围的部分匹配字符串

vba - 发票的 Excel 宏

sql - 使用批量插入时如何修剪空格?

sql-server - 使用 get-member 维护属性(property)秩序

excel - 扫描非默认 Outlook 收件箱中的电子邮件?

excel - 1 分钟事件后的 VBA Excel 应用程序 OnTime

c# - SqlDependency 仅在订阅时触发

sql-server - SQL DMV 将索引使用链接到存储过程使用

excel - 复制并粘贴到工作表中,谁的姓名不等于列表中的值?