如何将数据从多个文件加载到多个表?

时间:2012-08-29 11:51:56

标签: ssis

假设我们有10个不同的文件,需要加载到10个不同的表中。表名应与文件名相同。建议使用SSIS包一次加载所有文件的有效方法吗?

2 个答案:

答案 0 :(得分:0)

  1. 创建SSIS包。
  2. 创建10个平面文件连接(对于每个文件)。
  3. 在每个对象中创建10个Dataflow对象:

    • 平面文件来源(选定的txt文件)
    • 数据转换元素
    • 派生列元素
    • Ole DB目标元素(在此元素中,您需要在表选择combox附近按下“New”按钮.SSIS将为您提供带有表创建代码的SQL查询。将有来自File的所有列,也可以编辑表名)
  4. 在插入表之前,创建SQL任务以截断这些表。 您可能需要编辑一些数据类型,因为几乎总是SSIS提供字符串类型-varchar。

答案 1 :(得分:0)

这可以使用BCP命令,两个SQL任务和一个Foreach容器在SSIS中轻松实现。

在数据库中为各个平面文件创建表Schema。

现在在数据库中创建一个新表(Path_Table),该表应该有三列,如下所示。

第1列:Table_name第2列:File_path第3列:File_name

在(Path_Table)

中插入数据的示例
Insert into Path_Table Values (‘dept_table’,’d:\\’,’department.txt’)

它适用于'n'个表。

此打开后的SSDT创建一个新的SSIS包。现在拖动“执行SQL任务”

创建数据类型为object的名称“tbl_variable”的新变量。

现在编辑“执行SQL任务”并在常规选项卡中创建OLE DB连接并在SQL语句选项卡中写下面的查询。

//从dbo.Path_table //

中选择Table_name,File_path,File_name

现在在SQL任务中将结果集属性更改为“完整结果集”

在“执行SQL任务”的左窗格中,选择“结果集”查询的映射结果到我们的变量(tbl_variable)。

现在拖放“为每个容器”。在左侧窗格中选择“collection”,从下拉列表中选择“Enumerator”作为“For Each ADO Enumerator”,然后为ADO对象源变量选择变量(tbl_variable)。最后选择“枚举模式”为“第一张表中的行”。

'tbl_variable'结果有三列。现在在“变量映射”窗格中将三列结果映射到三个新变量(数据类型为varchar),即tbl_name,file_path和file_name,索引号分别为(0,1,2),因为它将成为下一个的参数映射SQL任务(加载数据) 现在在“For each container”里面取一个“SQL任务”。在“SQL命令”中 将查询写为:

declare @tblname sysname=?
declare @dir varchar(500)=?
declare @file_name varchar(500)=?
declare @SQLstring  varchar(2000)
set @SQLstring='BCP AdventureWorks2012.'+@tblname+'  IN  '+@dir+'\'+@file_name+'.txt  -c  -t, -S PRINHYLTPDL0937 -T  -R'
exec xp_cmdshell @SQLstring
go

在上面的查询中根据您的要求更改数据库和其他。 在参数映射窗格的“SQL任务”中,Map先前创建的三个变量(tbl_name,file_path和file_name)结果作为上述查询的输入,参数名称分别为0,1和2。