我希望这是有道理的,但我需要一些帮助。我从我们的一位客户那里收到了一个 CSV 文件,但他们没有向我们发送标准格式的文件。在大多数情况下,该文件包含 1 列,最多有一百万行,但有时他们会向我们发送多列,每列有一百万行左右。我的猜测是他们正在使用 Excel 并保存为 CSV。
我的问题是如何清理文件,这样我们就不必手动将其更改为一列?现在我SqlBulkCopy
用 a 做 a DataTable
。这也没有标题记录。
如果需要,我愿意以编程方式使用 SSIS,或者只是在 tsql 中执行逻辑,但不希望这样做。我更愿意在我的 c# 应用程序中执行此操作。一位同事建议导入一个导入保存表并使用联合获取一列,然后插入用于其他逻辑的表中。请帮忙?!?
编辑: 我认为一个例子在这里会很有用,所以这是我的尝试:
文件是这样的:aa, bb, cc, dd
我希望它看起来像这样:aa bb cc dd
注意:列将是固定宽度,但列数是动态的。
编辑#2:我最终为此做了不同的路线,主要是因为时间限制。我所做的是创建了一个包含 25 列的导入临时表。我曾经SqlBulkCopy
为此映射列。列映射将取决于中的列数,DataTable
我只是foreach
为此使用 a。
然后我调用一个存储过程来“处理”记录,方法是UNION ALL
为每一列执行一个并导入到最终表中。这也有助于解决有时有标题记录的问题,有时一列中会有空白,因为它没有以前的那么长。由于生产中的字段有唯一性约束,所以不能有多个空记录。
不优雅,但我让它工作。