我刚刚开始在Visual Studio 2008中使用SSIS,并学习了如何创建项目以指向CSV文件夹,然后导入到SQL Server上的表中。对我来说,下一步是尝试使其更加动态,我可以指向CSV文件夹,具有不同的结构,并为文件夹中的每个CSV文件创建一个新表。
每个CSV在列数方面都有自己的结构,所有都使用双引号进行文本限定,第一行标题并用逗号分隔。我还没有弄清楚参数化如何在数据流步骤中动态创建具有相应名称的新表。平面文件源能够生成SQL以为第一个平面文件创建表,但下一个CSV是不同的并且失败。这可能吗?
答案 0 :(得分:2)
AFAIK,SSIS没有动态检测CSV /文本文件结构的组件,相应地解析它,然后准备加载到某个表中。
您的任务看起来不像是一个" ETL工具任务"对我来说。它看起来更像是一个编程任务。 ETL工具仅适用于常见任务"而不是自定义任务。所以,我会在SSIS中这样做 - 创建一个控制表,其中包含文件位置和名称等参数,像" delimiter"," row header"然后,创建一个脚本任务(.net编程!)来设置这些参数以按结构解析文件并将它们加载到目标表中,所有这些都通过SSIS内的编程实现。也许你可以有另一个控制表来决定哪个文件到哪个DB /表以及哪个名称。
此外,如果这是一次或罕见的任务,只涉及5-10个文件,那么我建议你手动完成,而不是为它编写代码。编程文件解析器 也许"简单",但它不是一项微不足道的任务。搜索谷歌如何解析CSV /文本文件。
答案 1 :(得分:-1)
针对此问题的低技术解决方案是将所有CSV合并到一个Excel文件中,然后使用SQL Server中的导入/导出向导导入该Excel。
此网站包含将所有CSV合并为一个Excel文件所需的VBA脚本:https://www.extendoffice.com/documents/excel/3230-excel-import-multiple-csv-files.html