这个问题是对此问题的后续问题:
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循环容器中执行此操作。问题是我不知道如何按月增加SomeDate
。 SomeDate
的类型为datetime
。
我知道我必须将月份foreach循环容器嵌套在第一个foreach循环容器中,但我只是不知道如何设置它以使Param1
和Param2
知道它们的值来自第一个foreach循环容器。
答案 0 :(得分:1)
根据评论,如果您的目标是每月创建1个csv文件,我认为您不需要修改您的查询。我认为你需要的是在数据流中使用条件分割。
因此,您首先要使用年度查询创建数据源任务,然后在内部添加条件分割:
然后您将按月添加目标文件:
作为评论,我不会使用" 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