如何在ssis中将多个文件加载到多个目标表中

问题描述 投票:1回答:1

我在ssis中有一个疑问,源位置有不同的文件,每个文件名都带有位置名称。我们希望使用ssis包加载每个文件名对应的表。

source loacation为每个locationname文件都有多个文件; exaple:文件位置:c:\ Sourcefile \ Filesnames如:hyd文件,爆炸文件。 Hyd文件来自:hyd.txt,hyd1.txt hyd2.txt都是相同的结构only.hyd相关的所有文件只加载到hyd表。 bang文件来自:bang.txt,bang.txt bang2.txt都是相同的结构.bang相关的所有文件只加载到bang表中。所有源文件和目标表结构仅相同。

source FIles结构:用于hyd.txt文件

Id,name,loc
1,abc,hyd
2,hari,hyd
for hyd1.txt file
id,name,loc
4,banu,hyd
5,ran,hyd

similar to bang:
id,name,loc
10,gop,bang
11,union,loc
for bang1.txt file
id,name,loc
14,ja,bang

这里所有与水有关的文本文件都加载到sql server数据库表的hyd表中。类似于bang fils加载到bang表。水表结构:

CREATE TABLE [dbo].[hyd](
    [id] [int] NULL,
    [name] [varchar](50) NULL,
    [loc] [varchar](50) NULL
)
 similar to bang
CREATE TABLE [dbo].[bang](
    [id] [int] NULL,
    [name] [varchar](50) NULL,
    [loc] [varchar](50) NULL
)

我尝试如下:enter image description here enter image description here上面一个表名称没有动态。我在表变量中保持统计值。那时所有位置相关的记录都被加载到一个表中。如何在ssis中将多个文件加载到多个目标表中。请告诉我如何在ssis中执行此任务

sql-server ssis etl ssis-2012
1个回答
1
投票

从截图中我有3条建议:

  1. 您必须将数据流任务Delay Validation属性设置为True
  2. 您必须在数据流任务之外更改User::location变量值,您可以在数据流任务之前使用以下表达式添加表达式任务 @[User::location] = SUBSTRING(@[User::FileName],1,FINDSTRING(@[User::FileName,".",1) -1) 或使用脚本组件来实现此目的
  3. 或者你可以在每个循环中添加一个脚本任务,然后跟踪2个数据流任务,脚本任务检查文件名:如果它是hyd它执行第一个DFT,如果它是bang它执行第二个:(检查此链接:Working with Precedence Constraints in SQL Server Integration Services
© www.soinside.com 2019 - 2024. All rights reserved.