如何在SSIS包中按月递增?

时间:2017-03-03 15:48:29

标签: sql sql-server ssis

这个问题是对此问题的后续问题:

Can I set variables in an SSIS for loop based on a query?

它的要点是我有一个foreach循环容器,用两个值填充查询,如下所示:

WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Dec-2016'
      AND Param1 = ? AND Param2 = ?;

然而,我决定不做一整年的拉动,并决定每月拉一次,所以我将查询从此更改为:

WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Jan-2016'
      AND Param1 = ? AND Param2 = ?;

但是,我宁愿不写12个单独的,并且觉得我可以在foreach循环容器中执行此操作。问题是我不知道如何按月增加SomeDateSomeDate的类型为datetime

我知道我必须将月份foreach循环容器嵌套在第一个foreach循环容器中,但我只是不知道如何设置它以使Param1Param2知道它们的值来自第一个foreach循环容器。

2 个答案:

答案 0 :(得分:1)

根据评论,如果您的目标是每月创建1个csv文件,我认为您不需要修改您的查询。我认为你需要的是在数据流中使用条件分割。

因此,您首先要使用年度查询创建数据源任务,然后在内部添加条件分割:

enter image description here

然后您将按月添加目标文件:

enter image description here

作为评论,我不会使用" CSV"本身。我会使用" PSV"其中P代表Pipe Delimited" |"。在任何ETL过程中,他们通常不会遇到麻烦。

这种方法的最大优点是你不会迭代数据,并且应该使它更具性能。

答案 1 :(得分:0)

首先,如果你在SQL中使用循环,那么你做错了。鉴于此,您可以使用datepart在循环中选择月份,如下所示:

1)docker run -ti --rm --name server -p 3456:5678 tomcat:8.0 // not working with localhost:3456
2)docker run -ti --rm --name server -expose 8080 tomcat:8.0 //not working localhost:8080
3)docker inspect server // to see the ip:port and tried to access using it as well but no luck