如何从VBA中的存储过程中的存储过程捕获错误
我有一个存储过程,调用其他人,其中之一是由于重复主键无法插入一行到表中
引发的错误是消息2627,级别14,状态1,过程…,第16行违反主键约束“…”。 不能在对象“…”中插入重复的键。
我通过VBA通过Excel电子表格调用这个函数,通常在On Error处理,但是这个例程在没有触发错误的情况下会自动失败。
我不确定这是否存储过程中的存储过程或错误的严重程度太低。
有没有人经历过这样的事情,可以提出一个解决办法?
我最初的尝试是在存储过程调用周围放置一个BEGIN TRY / BEGIN CATCH块,CATCH以更高的严重级别运行RAISERROR,但似乎没有被触发。
谢谢
在外部proc中添加一个显式的事务。 BEGIN TRANSACTION
开始, COMMIT TRANSACTION
结束。
然后在开始事务之前添加SET XACT_ABORT ON;
。 这将处理批次失败。
在内部过程出错后,检查语句级错误的错误值,例如
IF @@ERROR <> 0 BEGIN ROLLBACK TRANSACTION; RETURN 1; END
我们用T-SQL中的OUTPUTvariables来做到这一点,尽pipe我只知道它的SQL方面:你需要谷歌从SQL获取输出参数与VBA。 声明一个输出variables为一个varchar,并立即将其设置为“':
DECLARE @MyError VARCHAR(500) OUTPUT SET @MyError = ''
在T-SQL中进行正常的错误检查,如果发现错误,则将描述设置到@MyErrorvariables中。 你的VBA代码将总是得到@MyError消息,但是它通常是一个空string''。 如果不是,那么你去在VBA中的error handling。