我有一个调用其他几个存储过程的存储过程,其中一个由于重复的主键而无法将行插入到表中
引发的错误是 消息 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/