如何捕获导致批量插入错误的特定ID

时间:2019-07-03 05:27:44

标签: sql-server tsql sql-server-2008-r2 try-catch

我有一个带有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值吗? 任何建议将不胜感激。

1 个答案:

答案 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