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

时间:2012-08-31 16:23:59

标签: sql sql-server sql-server-2005 ssis

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

  • 我使用5000行的文本文件。该文件在行3000和4000之间包含重复的ID(有意)。
  • 在启动DTS之前,目标表完全为空。
  • 使用批量插入任务,在引发错误(和DTS停止)后,目标表有3000行。我将 BatchSize 属性设置为1000。
  • 使用OleDB Destination,在引发错误后,目标表有0行!我将 Rails per batch 属性设置为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 个答案:

答案 0 :(得分:1)

批量插入没有回滚,这就是为什么它们很快。


看一下使用格式文件: http://msdn.microsoft.com/en-us/library/ms179250.aspx

答案 1 :(得分:0)

您可以将其放在SSIS中的transactionyou'll need MSDTC running)中,或者您可以使用try-catch创建T-SQL脚本来处理批量插入的任何异常(可能只是回滚或提交)。