【问题标题】:how to load multiple files into multiple destination table in ssis如何将多个文件加载到ssis中的多个目标表中
【发布时间】:2018-03-01 15:01:10
【问题描述】:

您好,我对 ssis 有一个疑问, 源位置有不同的文件每个文件名都带有位置名称。这里我们要加载 每个文件名对应表使用ssis包。

源位置对于每个位置名称文件都有多个文件; 示例:文件位置:c:\Sourcefile\ 文件名类似于:hyd 文件、bang 文件。 Hyd 文件如下: hyd.txt、hyd1.txt hyd2.txt 都是相同的结构。hyd 相关的所有文件仅加载到 hyd 表中。 bang 文件类似于:bang.txt,bang.txt bang2.txt 都是相同的结构。bang 相关的所有文件只加载到 bang 表中。 只有所有源文件和目标表结构相同。

源文件结构:用于 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

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

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
)

我尝试如下: 以上一个表名称没有动态变化。我在表变量中保留了统计值。那时所有与位置相关的记录都被加载到一个表中。 如何在 ssis 中将多个文件加载到多个目标表中。请告诉我如何在 ssis 中完成此任务

【问题讨论】:

  • 为什么不能添加2个数据流任务?
  • 我同意@BHouse 的观点,2 个数据流似乎是一种更有效的工作方式,但在您当前的包中,我会说问题是位置变量的更新,您可能需要一个脚本更新任务。
  • 实际上在我的源端有 100 + 文件名。所以我们不能在它可能添加的功能中再次执行 100 dft。所以我们需要在基于文件名传递的目标表中动态执行。
  • 你可以为 hyd 做一个,为 bang 和 load 做一个并行,但无论如何我认为问题是变量位置的更新,你是在派生列转换中做的吗?跨度>

标签: sql-server ssis etl ssis-2012


【解决方案1】:

从截图中我有 3 条建议:

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

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

    或者使用脚本组件来实现这个

  3. 1234563执行第二个:(查看此链接:Working with Precedence Constraints in SQL Server Integration Services

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多