我设置了一个SSIS包,可以将下载的数据文件导入数据库(按日期一次一个文件)
当前设置(对于文件):
已下载的文件位于(2月1日至今的日期范围之间存在相同的文件)
C:\数据文件\ GeneralSale_20170201.txt
在SSIS中变量 - 对于每个文件,有4个变量。首先是文件所在的位置,称为@Location
第二个简单提供名为@GeneralSales
的文件的名称,返回值
GeneralSale _
第三个是代码所在的日期(@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上导入文件,那么我会调整导出日期然后运行包
最后一个变量是@ExportFileExtension
返回值
TXT
然后在DataFlow中,如下所示:
平面文件源连接到下面的连接字符串。连接字符串的Property > Expressions > ConnectionString
运行变量以生成文件名。这是我使用之前的变量的地方
@[User::Location] + @[User::GeneralSales] + @[User::ExportDateFormatted] + "." + @[User::ExportFileExtension]
返回值:
C:\数据文件\ GeneralSale_20170201.txt
然后使用该文件的数据填充表。但要将日期插入另一天,我必须修改日期并运行包。
我要做的是传递开始日期和结束日期,让包裹在这些日期之间插入文件中的所有数据。
希望上述信息清楚地说明发生了什么以及我想要实现的目标。
答案 0 :(得分:1)
您需要在两个日期之间进行迭代。在SSIS中它很简单;我将描述主要步骤:
StartDate
和EndDate
,并在包开始时 - 验证StartDate <= EndDate
。 ExtrDate
,并使用设置初始表达式@ExtrDate = @StartDate
,评估 - @ExtrDate <= @EndDate
和分配 - @ExtrDate = DateAdd("dd", 1, @ExtrDate)
添加 For Loop 。这个循环的目的非常清楚。 ExtrDate
变量
包参数允许构建更灵活的包。