具有日期变量的SSIS For循环容器

时间:2018-12-03 09:52:25

标签: date for-loop ssis odbc

我想创建一个每月包,在ODBC上执行每日查询并写入输出文件。

更具体地说,必须首先在上个月(e.g. '01/11/2018')的第一天执行查询,然后在下一个('02/11/2018')的第二天直到上个月('30/11/2018')的最后一天执行查询。

日期变量当前被保存为字符串,我还希望将具有Oracle日期格式的字符串变量插入查询中。应该如何组织?有没有办法可以在表达式中使用字符串变量?

2 个答案:

答案 0 :(得分:1)

将其分成以下部分:

  1. 声明变量以存储上个月的开始和结束日期,如下所示:

开始日期(日期时间) = <Build_details> <Release number="1902"> <Build number="260"> <OMS> <Build_path>ST_OMS_V1810_B340</Build_path> <Pc_version>8041.30.01</Pc_version> </OMS> <OMNI> <Build_path>ST_OMNI_V1810_B340</Build_path> </OMNI> </Build> </Release> <Release number="1810"> <Build number="230"> <OMS> <Build_path>ST_OMS_909908</Build_path> <Pc_version>8031.25.65</Pc_version> </OMS> <OMNI> <Build_path>ST_OMNI_798798789789</Build_path> </OMNI> </Build> </Release> <Release number="1806"> <Build number="300"> <OMS> <Build_path>ST_OMS_V18102_B300</Build_path> <Pc_version>8041.30.01</Pc_version> </OMS> <OMNI> <Build_path>ST_OMNI_V18102_B300</Build_path> </OMNI> </Build> </Release> </Build_details> How can i insert below chunk of data by asking release no to user and insert below it : <Build number="230"> <OMS> <Build_path>ST_OMS_909908</Build_path> <Pc_version>8031.25.65</Pc_version> </OMS> <OMNI> <Build_path>ST_OMNI_798798789789</Build_path> </OMNI> </Build>

结束日期(日期时间) = (DT_DATE)((DT_WSTR,4)YEAR(DATEADD("MM",-1,GETDATE()))+"-"+RIGHT("0"+(DT_WSTR,2)MONTH(DATEADD("MM",-1,GETDATE())),2)+"-01")

  1. 声明变量DATEADD("D", -(DAY(GETDATE())),GETDATE())

  2. 创建一个Counter(datetime),如下所示:

img

  1. 其余数据流任务应位于For循环容器中,该容器将创建输出文件。您可以在SQL中使用变量For loop container对其进行参数化

答案 1 :(得分:0)

事实上,我发现我想在循环中使用的只是日期的一天,因此我创建了两个额外的int变量,其中包含: 1)每月的第一天(1) 2)该月的最后一天(28,30,31) 我在ds使用了这两个变量,并将索引转换为字符串,因此可以将其添加到查询中。可能会有更好的方法,这将受到欢迎。