2012-08-29 49 views
0

假设我们有10个不同的文件需要加载到10个不同的表中。表名应与文件名相同。建议使用SSIS包一次有效地加载所有文件?如何将多个文件中的数据加载到多个表中?

+1

定义高效。你是否想要一个对你的开发者有效的进程,或者一个能够通过管道高效地将数据移动到数据库中的进程? –

回答

0
  1. 创建SSIS包。
  2. 创建10个平面文件连接(对于每个文件)。
  3. 创建10个数据流中的每个对象:

    • 平面文件源(选择txt文件)
    • 数据变换元
    • 派生列元素
    • 的OLE DB目标元素(在此元素,你需要在表格选择combox附近按下“New”按钮,SSIS会给你SQL查询和表格创建代码,将会有你文件中的所有列,也可以编辑表格名称)

在插入表之前,创建SQL Task以截断这些表。 您可能需要编辑一些数据类型,因为几乎总是SSIS提供字符串类型-varchar。

0

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

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

现在在数据库中创建一个新表(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 package.Now拖“执行SQL任务”

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

现在编辑“执行SQL任务”,并在常规选项卡中进行OLE DB连接,并在SQL Statement选项卡下面写下查询。

//选择TABLE_NAME,FILE_PATH,FILE_NAME从dbo.Path_table //

现在SQL任务变化的结果集属性设置为“整个结果集,”

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

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

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

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

在上面的查询使数据库和其它的变化按您的要求。 在参数映射窗格中的“SQL任务”中,Map前面分别以Parameter Name分别为0,1和2创建了三个变量(tbl_name,file_path和file_name)结果作为上述查询的输入。

相关问题