Возможно ли использовать ALTER TABLE (DDL) в середине транзакции DML в той же таблице?
======================================================================================

 Скажем, вы начинаете SqlTransaction из C #, внутри которого вы вставляете данные из DataTable в таблицу SQL, но эти данные являются МНОГО данных, поэтому вы делаете это «в кусках» с помощью SqlBulkCopy внутри транзакции SQL и только фиксируете транзакции, если ВСЕ куски скопированы успешно. 

 Предположим, вы знаете, что порой длина вставленных значений будет превосходить максимальный размер столбца в целевой таблице, поэтому SqlBulkCopy будет терпеть неудачу в этой точке для этого конкретного «куска». Возможно ли (или даже целесообразно) уловить это исключение и изменить таблицу / столбец, чтобы увеличить максимальную длину целевого столбца, а затем продолжить данные SqlBulkCopy'ы, которые собирают следующий «кусок» для копирования, даже если у вас нет вы начали свою «вставку транзакции»? 

 Итак, пытаясь перефразировать это, можно ли начать транзакцию DML, остановиться в середине этой незафиксированной транзакции, выполнить DDL, чтобы изменить целевую таблицу, затем заполнить оригинальный DML и зафиксировать его? 

 Чтобы ответить на ваш вопрос, можно изменить таблицу между операторами insert. Если вы охватите транзакцию для каждой партии, вам потребуется только откат 1 партии для обновления длины столбца. С этим подходом существует больше накладных расходов, чем установка длин столбцов до начала ввода данных. 

 Хорошим подходом было бы проверить каждый столбец ваших исходных данных на максимальную длину и затем обновить целевую базу данных с новыми столбцами (столбцами) до начала импорта данных. Таким образом, вы знаете, что целевая база данных может принимать все данные, которые будут предоставлены.