如何在ssis

时间:2018-03-01 15:01:10

标签: sql-server ssis etl ssis-2012

我对ssis有一点怀疑,  源位置有不同的文件,每个文件名都带有位置名称。我们想要加载 每个文件名使用ssis包对应表。

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

source FIles Structure:for hyd.txt file

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中执行此任务

1 个答案:

答案 0 :(得分:1)

从截图中我有3条建议:

  1. 您必须将数据流任务Delay Validation属性设置为True
  2. 您必须在数据流任务之外更改User::location变量值,您可以在数据流任务之前使用以下表达式添加表达式任务

    @[User::location] = SUBSTRING(@[User::FileName],1,FINDSTRING(@[User::FileName,".",1) -1)
    

    或使用脚本组件来实现此目的

  3. 或者您可以在每个循环内添加一个脚本任务,其中包含2个数据流任务,脚本任务检查文件名:如果是hyd则执行第一个DFT,如果是{{1} 1}}它执行第二个:(检查此链接:Working with Precedence Constraints in SQL Server Integration Services