首页 文章

OleDB Destination在出错时执行完全回滚,Bulk Insert Task不执行

提问于
浏览
1

我正在使用SSIS和BIDS来处理包含大量(数百万)记录的文本文件 . 我决定使用批量插入任务,它工作得很好,但目标表需要一个额外的列,插入操作的默认值和批量插入任务停止工作 . 之后,我决定使用带有默认值的Derived Column和OleDB Destination来插入批量数据 . 它解决了我的上一个问题,但生成了一个新问题:如果在OleDB目标中插入数据时出错,那么它执行完全回滚并且我的表上没有添加任何行,但是当我使用批量插入任务时,那里是基于BatchSize配置的行 . 让我用一个例子解释一下:

  • 我使用5000行的文本文件 . 该文件在行3000和4000之间包含重复的id(有意) .

  • 在启动DTS之前,目标表完全为空 .

  • 使用批量插入任务,在引发错误(和DTS停止)后,目标表有3000行 . 我将BatchSize属性设置为1000 .

  • 使用OleDB Destination,在引发错误后,目标表有0行!我将每批行数属性设置为1000,并将最大插入提交大小设置为其最大值:2147483647.我尝试将最后一个更改为0,没有效果 .

这是OleDB Destination的正常行为吗?有人能为我提供有关处理这些任务的指南吗?我是否应该忘记使用这些任务并使用T-SQL中的Bulk Insert

作为旁注,我也尝试按照Keep Nulls or UseDefault Values During Bulk Import (SQL Server)KEEPNULLS 的说明不使用OleDB目标任务,但它不起作用(也许只是我) .


编辑:有关该问题的其他信息 .

表结构(样本)

表T.

id int, name varchar(50), processed int default 0

CSV文件(样本)

1, hello
2, world

2 回答

相关问题