как поймать определенный идентификатор, который вызывает ошибку в массовой вставке - PullRequest
0 голосов
/ 03 июля 2019

У меня есть блок кода с оператором INSERT со множеством примененной логики, и через несколько минут он выходит из строя из-за любых других ошибок вставки, таких как «ошибки усечения» и так далее.И поэтому вставка не удалась и выдает ошибку, как я упоминал в блоке catch, но мне нужно знать, какой именно идентификатор вызывает эту ошибку.Можно ли получить этот идентификатор?ниже приведен пример моего блока кода

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 голосов
/ 03 июля 2019

что-то подобное может работать:

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
...