比如说,您从 C# 开始一个 SqlTransaction,在其中您将 DataTable 中的数据插入到 SQL 表中,但是这些数据是大量数据,因此您在 SQL 事务中使用 SqlBulkCopy 进行“分块”,并且只提交如果所有块都成功复制,则交易。
现在,假设您知道插入的值的长度有时会超过目标表中的最大列大小,因此 SqlBulkCopy 将在该特定“块”的点上失败。是否有可能(甚至可取)捕获此异常并更改表/列以增加目标列的最大长度,然后继续 SqlBulkCopy'ing 数据拾取下一个要复制的“块”,即使您没有提交了您开始的“插入交易”?
那么,试着解释一下,是否可以启动一个 DML 事务,在这个未提交的事务中间停止,执行一个 DDL 来更改目标表,然后完成原始 DML 并提交它?