如果存在于文件夹中,则将多个表从CSV导入SQL

时间:2015-09-30 09:39:15

标签: sql sql-server csv import

在此问题的扩展中:Import Multiple CSV Files to SQL Server from a Folder

正如问题所述,我想从CSV将多个表从一个文件夹导入SQL服务器。但事情就是在我的情况下,我可以拥有多达17个不同的表,它们都有不同的布局。有些有2列,有些则有10列。

是否可以创建一个脚本,该脚本根据CSV文件的名称考虑不同的表设置,如果表实际存在于文件夹中,则将其导入正确?

好处是CSV文件永远不会改变名称/布局。但并非所有17个表都用于每个项目。

我想要粗略的代码以及适当的评论,以便我理解它。

有人请帮我解决这个问题。 非常感谢提前:)

1 个答案:

答案 0 :(得分:0)

这是使用 SQL Server Integration Services(SSIS)的完美情况,只要您在工作环境中可以使用它。 (我会假设你这样做,或者可以安装它。)

SSIS本身就是一个巨大的平台,所以我无法解释如何在这里使用它的一切。一些开始学习它的好地方是:

还有很多书籍和其他网站。

从广义上讲,您首先需要创建一个SSIS“包”,它是.dtsx扩展名的文件。您可以使用Microsoft Visual Studio或Microsoft SQL Server数据工具在本地PC上创建它。它具有合理的用户友好图形界面。

在此程序包中,您需要为17个可能的文件中的每个文件配置数据源,然后将它们“映射”到目标SQL数据库中的相应表。

如果您正确设置它,如果某些文件实际上不存在,那么包将正常工作 - 它将加载任何存在的文件。 这就是为什么SSIS在您的用例中是一个不错的选择的关键。

创建包后,有多种方法可以使用/部署它。根据您的意见和问题,我认为最适合您的方式可能是:

  1. 将其上传到SQL Server上的SSIS包存储(使用SSMS对象资源管理器,连接到SSIS实例而不是SQL Server实例)。为此,您需要在SQL Server平台上安装SSIS组件。
  2. 通过SQL Agent创建SQL作业,并带有触发SSIS包的步骤。您可能还需要在该步骤之前或之后执行步骤,以运行准备要将数据加载到的SQL表的T-SQL代码,或者在加载后对数据执行操作(例如清理和验证它)。
  3. 而不是运行SQL脚本来关闭整个过程,而是手动(通过SQL Agent再次)或使用内置的调度工具(例如,它可以每晚6点运行)来触发作业运行。
  4. 软件包也可以保存为任何文件夹位置的独立可执行文件,并通过双击在Windows中运行(无需再次打开Visual Studio / SSDT)。