是否有人能够通过SSIS将可变记录长度的文本文件(CSV)输入SQL Server?
我一次又一次地尝试使用SSIS将CSV文件放入SQL Server表中,其中输入文件具有不同的记录长度。对于这个问题,两个不同的记录长度是63和326字节。所有记录长度都将导入到相同的326字节宽度表中。
要导入的记录超过100万条
我无法控制导入文件的创建。
我必须使用SSIS
我已经向MS确认这已被报告为错误。
我尝试了几种解决方法。大部分都是我尝试编写自定义代码来拦截记录的地方,我似乎无法按照我的意愿去工作。
答案 0 :(得分:4)
我遇到了类似的问题,并在数据流选项卡下使用了自定义代码(脚本任务)和脚本组件。
我有一个平面文件源输入脚本组件。在那里,我使用代码来操纵输入数据并将其修复到目的地。
我的问题是提供商使用'000000'作为没有可用的日期,而另一个coloumn有填充/修剪问题。
答案 1 :(得分:1)
导入此文件应该没有问题。只需确保在创建平面文件连接管理器时,选择分隔格式,然后将SSIS列长度设置为最大文件列长度,以便它可以容纳任何数据。
看起来您使用的是固定宽度格式,这对于CSV文件不正确(因为您有可变长度列),或者您可能错误地设置了列分隔符。
答案 2 :(得分:1)
同样的问题。在我的例子中,目标CSV文件有标题&页脚记录的格式与文件正文完全不同;页眉/页脚用于验证文件处理的完整性(日期/时间,记录计数,总金额 - “校验和”以任何其他名称...)。这是来自“大型机”环境的文件的常见格式,虽然我还没有开始,但我希望必须使用脚本来剥离页眉/页脚,将其余部分保存为新文件,处理新文件文件,然后进行验证。不能完全指望MS拥有开箱即用(但肯定会很好,不是吗?)。
答案 3 :(得分:1)
您可以使用C#编写脚本任务来遍历每一行并用适当数量的逗号填充它以填充数据。当然,这假定所有数据都与正确的列对齐。
即。当您阅读每条记录时,您可以“计算”逗号的数量。然后,只需将X个逗号附加到记录的末尾,直到它具有正确的逗号数。
Excel存在导致转换为CSV时创建此类文件的问题。
如果您可以“手动”执行此操作,解决此问题的最佳方法是在Excel中打开文件,在记录的“结尾”创建一个列,并使用{{1}完全填充它s或其他一些角色。
讨厌,但可以快速解决。
如果您无法执行此操作,则可以按照上述方式以编程方式执行相同的操作。
答案 4 :(得分:0)
为什么不能将它作为测试文件导入并将列分隔符设置为“,”并将行分隔符设置为CRLF?