从平面文件读取SSIS问题

时间:2009-07-01 17:34:52

标签: sql-server ssis

我的SSIS程序从.csv文件中读取为输入。

该文件大约有60,000行。并且我的SSIS包在读取期间失败,说由于可能丢失数据而无法转换某个列。

现在,我确信大多数行都是正确的。因为我已经尝试粘贴文件的随机子集,SSIS读起来很好。

但我无法找到一种方法来确定我的包裹失败的确切线路。

我花了两个月的时间来解决这个问题,有什么建议吗?

4 个答案:

答案 0 :(得分:5)

你可以找到第一个有16次迭代的罪魁祸首。这是一个大脑+布朗方法:

第一:支持一切。在安全的地方制作备份副本。很抱歉说明显了,但我最近被咬了,而且我知道更好。

具有60K记录的文件 - 让我们将其称为您的基本文件。

  1. 将基本文件拆分为两个文件(FileA,FileB)
  2. 使用其中一个作为输入。
  3. 运行SSIS - 如果SSIS失败,请使用FileA作为基本文件 - 否则使用FileB作为基本文件
  4. 转到第1步
  5. 您将在16次迭代中获得违规记录。 (60k,30k,15k,7500,3750,1875,937,468,234,117,58,29,14,7,3,1)

    为所有内容启用登录并重新运行SSIS包。您应该在基本文件中包含违规记录,并在日志中包含确切的数据点。

答案 1 :(得分:0)

首先,简化问题。创建仅使用此平面文件源和一些虚拟目标的数据流任务。注意失败。

打开所有日志记录并翻阅日志。关闭你发现的记录区域显然毫无价值,然后重新运行。

此外,您应该配置源和/或目标的错误输出:无论哪个给您错误。将错误的行发送到您可以在运行后查看的单独目标。

答案 2 :(得分:0)

大多数情况下,当我碰到这个时,这是因为数据长于预期(即尝试将60个字符的字符串放入varchar(50)字段中),或者它是一个精确的数字可能会丢失(即将26.5插入整数字段或将26.55插入到仅允许一位小数的数字字段中)。

答案 3 :(得分:0)

设置DefaultBufferMaxRows = 1

这将逐个读取和处理每一行,并且在转换问题的行上将失败。

无需通过拆分文件手动执行此操作。