在2个日期之间将数据从平面文件源插入数据库

时间:2017-02-08 11:10:31

标签: ssis

我设置了一个SSIS包,可以将下载的数据文件导入数据库(按日期一次一个文件)

当前设置(对于文件):

  1. 已下载的文件位于(2月1日至今的日期范围之间存在相同的文件)

      

    C:\数据文件\ GeneralSale_20170201.txt

  2. 在SSIS中变量 - 对于每个文件,有4个变量。首先是文件所在的位置,称为@Location

  3. 第二个简单提供名为@GeneralSales的文件的名称,返回值

      

    GeneralSale _

  4. 第三个是代码所在的日期(@ExportDateFormatted),(DT_WSTR,8)(DATEPART("yyyy", @[User::ExportDate]) * 10000 + DATEPART("mm", @[User::ExportDate]) * 100 + DATEPART("dd", @[User::ExportDate]))[ExportDate]设置为DATEADD("DD", 0, GETDATE())

    [ExportDate]允许我设置我要在表dbo.GeneralSale中导入的文件日期(已经下载),即如果我要在20170205上导入文件,那么我会调整导出日期然后运行包

  5. 最后一个变量是@ExportFileExtension返回值

      

    TXT

  6. 然后在DataFlow中,如下所示:

  7. enter image description here

    平面文件源连接到下面的连接字符串。连接字符串的Property > Expressions > ConnectionString运行变量以生成文件名。这是我使用之前的变量的地方

    @[User::Location] + @[User::GeneralSales] +  @[User::ExportDateFormatted] + "." +  @[User::ExportFileExtension]
    

    返回值:

      

    C:\数据文件\ GeneralSale_20170201.txt

    然后使用该文件的数据填充表。但要将日期插入另一天,我必须修改日期并运行包。

    我要做的是传递开始日期和结束日期,让包裹在这些日期之间插入文件中的所有数据。

    希望上述信息清楚地说明发生了什么以及我想要实现的目标。

1 个答案:

答案 0 :(得分:1)

您需要在两个日期之间进行迭代。在SSIS中它很简单;我将描述主要步骤:

  1. 定义两个包参数,类型为Date的StartDateEndDate,并在包开始时 - 验证StartDate <= EndDate
  2. 定义日期变量ExtrDate,并使用设置初始表达式@ExtrDate = @StartDate,评估 - @ExtrDate <= @EndDate和分配 - @ExtrDate = DateAdd("dd", 1, @ExtrDate)添加 For Loop 。这个循环的目的非常清楚。
  3. 将提取任务放在 For Loop 容器中。
  4. 循环的每一步都会增加

    ExtrDate变量 包参数允许构建更灵活的包。