我正在使用SSIS和BIDS来处理包含大量(数百万)记录的文本文件。我决定使用批量插入任务,它工作得很好,但目标表需要一个额外的列,插入操作的默认值和批量插入任务停止工作。之后,我决定使用带有默认值的Derived Column和OleDB Destination来插入批量数据。它解决了我的上一个问题,但生成了一个新问题:如果在OleDB目标中插入数据时出错,那么它执行完全回滚并且我的表上没有添加任何行,但是当我使用批量插入任务时,那里是基于BatchSize配置的行。让我用一个例子解释一下:
这是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
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以将其放在SSIS中的transaction(you'll need MSDTC running)中,或者您可以使用try-catch创建T-SQL脚本来处理批量插入的任何异常(可能只是回滚或提交)。