SSIS For循环-循环中按月递增'YYYYMM'

问题描述 投票:1回答:1

我正在尝试执行一个for循环,该循环以类似'201812'的格式传递开始日期,并递增增量为'201903'的结束日期(例如)。变量作为整数传递给存储的proc,然后该proc根据这些值获取并插入数据。我正在尝试实现在此找到的模式,但是它似乎没有正确地递增:

SSIS For Loop Container with Date Variable

我已经设置了如下变量:

User Variables

[在此处的执行SQL任务中设置了ETLBeginPeriod和ETLEndPeriod:

Variables Get Set

然后是For循环中的表达式

For Loop Expressions

AssignExpression中的完整表达式是

@[User::Counter] = LEFT((DT_WSTR,19)(DATEADD("mm",1,(DT_DBDATE)(LEFT((DT_WSTR, 10) (@[User::Counter]),4) + "-" + RIGHT((DT_WSTR, 10) (@[User::Counter]),2) + "-" + "01"))),4) + SUBSTRING((DT_WSTR,19)(DATEADD("mm",1,(DT_DBDATE)(LEFT((DT_WSTR, 10) (@[User::Counter]),4) + "-" + RIGHT((DT_WSTR, 10) (@[User::Counter]),2) + "-" + "01"))),6,2)

当测试AssignExpression时,表达式本身确实会返回正确的值(即它将201808更改为201809,但这似乎没有受到影响。它将在初始值处获得正确的值通过并运行201808,然后再尝试使用201808。因此,它似乎并没有改变“计数器值”。

编辑-已解决:我决定添加一个脚本任务来查看变量,结果发现它们正确地递增了,但是我分配了错误的变量才能传递给存储过程。我最初一直在使用ETLBeginPeriod,却忘记将其更改为Counter变量。一旦我做到了,它就会起作用。 Arg。

sql-server for-loop ssis expression etl
1个回答
1
投票

我认为主要问题是您忘记将整个结果转换为整数。尝试使用以下表达式:

@[User::Counter] = (DT_I4)(LEFT((DT_WSTR,19)(DATEADD("mm",1,(DT_DBDATE)(LEFT((DT_WSTR, 10) (@[User::Counter]),4) + "-" + RIGHT((DT_WSTR, 10) (@[User::Counter]),2) + "-" + "01"))),4) + SUBSTRING((DT_WSTR,19)(DATEADD("mm",1,(DT_DBDATE)(LEFT((DT_WSTR, 10) (@[User::Counter]),4) + "-" + RIGHT((DT_WSTR, 10) (@[User::Counter]),2) + "-" + "01"))),6,2))
© www.soinside.com 2019 - 2024. All rights reserved.