我有一个带有INSERT语句的代码块,并应用了许多逻辑,几分钟后,由于其他任何插入错误(例如“截断错误”),它失败了。因此插入失败,并引发了一个错误,正如我在catch块中提到的那样,但是我需要知道哪个特定的ID会导致该错误。是否有可能获得该ID? 下面是我的示例代码块
BEGIN TRY
BEGIN TRAN
INSERT INTO MyTable (fieldA, fieldB,.....)
SELECT (fieldA, fieldB,.....)
FROM <many joins from other tables>
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE()
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
如果插入失败,我们可以在该CATCH块中获取fieldA值以及ERROR_NUMBER()和ERROR_MESSAGE()吗?
或者还有其他方法可以查看导致错误的特定fieldA值吗? 任何建议将不胜感激。
答案 0 :(得分:0)
类似的东西可能起作用:
DECLARE @ids TABLE (id bigint)
BEGIN TRY
BEGIN TRAN
DECLARE @ids TABLE (id bigint)
INSERT INTO b.tbl
OUTPUT Inserted.ID INTO @ids(id)
select f1,f2,f3 from b.tbl
COMMIT TRAN
END TRY
BEGIN CATCH
select * from @ids
SELECT ERROR_NUMBER(), ERROR_MESSAGE()
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH