我正在使用 SSIS 和 BIDS 处理包含大量(数百万)记录的文本文件。我决定使用批量插入任务,它工作得很好,但是目标表需要一个附加列,插入操作的默认值和批量插入任务停止工作。之后,我决定使用具有默认值的派生列和 OleDB 目标来插入批量数据。它解决了我的最后一个问题,但又产生了一个新问题:如果在 OleDB 目标中插入数据时出错,则它会执行完整回滚,并且我的表上没有添加任何行,但是当我使用批量插入任务时,那里是基于 BatchSize 配置的行。让我用一个示例来解释它:
- 我使用一个 5000 行的文本文件。该文件在第 3000 行和第 4000 行之间包含重复的 ID(故意)。
- 在启动 DTS 之前,目标表是完全空的。
- 使用批量插入任务,在引发错误(并且 DTS 停止)后,目标表有 3000 行。我将BatchSize属性设置为 1000。
- 使用 OleDB Destination,出现错误后,目标表有 0 行!我将Rows per batch属性设置为 1000,Maximum insert commit size设置为其最大值:2147483647。我尝试将最后一个更改为 0,但没有效果。
这是 OleDB Destination 的正常行为吗?有人可以为我提供有关处理这些任务的指南吗?我应该忘记使用这些任务并使用T-SQL中的批量插入吗?
作为旁注,我还尝试按照KEEPNULLS
在批量导入期间保留 Nulls 或 UseDefault 值(SQL Server)中的说明不使用 OleDB 目标任务,但它不起作用(可能只是我)。
编辑:有关该问题的附加信息。
表结构(示例)
药片
id int, name varchar(50), processed int default 0
CSV 文件(示例)
1, hello
2, world