我有一个存储过程调用其他几个,其中一个由于重复的主键而无法在表中插入行
引发的错误是 Msg 2627,Level 14,State 1,Procedure ...,第16行 违反PRIMARY KEY约束'...'。无法在对象'...'中插入重复键。
我通过VBA从Excel电子表格中调用它,并且通常使用On Error处理,但是例程在没有触发错误的情况下静默失败。
我不确定这是否存在于存储过程中的存储过程中,或者错误的严重程度是否过低。
有没有人经历过这样的事情,可以建议一个解决方法?
我最初的尝试是在存储过程调用周围放置一个BEGIN TRY / BEGIN CATCH块,CATCH以更高的严重性运行RAISERROR,但它似乎没有触发。
由于
答案 0 :(得分:2)
在外部proc中添加一个显式事务。开头为BEGIN TRANSACTION
,最后为COMMIT TRANSACTION
。
然后在开始事务之前添加SET XACT_ABORT ON;
。这将解决批次故障。
在带有错误的内部proc之后,检查语句级别错误的错误值,例如
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION;
RETURN 1;
END
答案 1 :(得分:0)
我们使用T-SQL中的OUTPUT变量执行此操作,但我只知道它的SQL方面:您需要谷歌使用VBA从SQL获取输出参数。将输出变量声明为varchar,并立即将其设置为'':
DECLARE @MyError VARCHAR(500) OUTPUT
SET @MyError = ''
在T-SQL中执行正常的错误检查,如果发现错误,请在@MyError变量中设置描述。您的VBA代码将始终获取@MyError消息,但它通常是一个空字符串''。如果不是,那么您将在VBA中进行错误处理。