首页 > 解决方案 > 如何使用具有不同日期值的相同 SSIS 数据流?

问题描述

我有一个非常简单的 SSIS 包,其中包含一个数据流,该数据流由一个 OLEDB 源和一个平面文件目标组成。OLEDB 源调用采用 2 组参数的查询。我已将参数映射到日期/时间变量。

我想知道如何最好地将 4 组不同的日期传递给变量并在我的查询中使用这些值?

我已经使用项目枚举器对 For Each 循环容器进行了试验。但是,这似乎不起作用,并且包会引发 System.IO.IOException 错误。

我的容器配置如下: 请注意,这两个变量都是日期/时间数据类型。项目枚举器 变量映射

如何将 4 个单独的值集传递给相同的变量并使用每个变量对来运行我的数据流?

标签: ssis

解决方案


设置

我创建了一个表并用您的样本集的连续数据填充它

DROP TABLE IF EXISTS dbo.SO_67439692;
CREATE TABLE dbo.SO_67439692
(
    SurrogateKey int IDENTITY(1,1) NOT NULL
,   ActionDate date
);

INSERT INTO
    dbo.SO_67439692
(
    ActionDate
)
SELECT
    TOP (DATEDIFF(DAY, '2017-12-31', '2021-04-30'))
    DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), '2017-12-31') AS ActionDate
FROM
    sys.all_columns AS AC;

在我的 SSIS 包中,我添加了两个变量 startDate 和 endDAte2018,它们都是日期时间类型。我添加了一个 OLE DB 连接管理器,指向我制作上述表格的数据库。

我添加了一个 Foreach 项目枚举器,为项目枚举器配置它,并将那里的列定义为日期时间

在此处输入图像描述

我填充了它(多么笨重的编辑器),年份范围从 2018 年到 2020 年,如图所示,2021-01-01 到 2021-04-30。

我将变量连接起来,如问题定义中所示并按原样运行。没有报告 IO 错误。

一旦我知道我的 foreach 容器正在工作,数据流就变得微不足道了。

我使用参数化查询在 foreach 循环中添加了一个数据流,其中包含一个 OLE DB 源,如下所示

DECLARE @StartDate date, @EndDate date;
SELECT  @StartDate = ?, @EndDate = ?;

SELECT *
FROM
    dbo.SO_67439692 AS S
WHERE
    S.ActionDate >= @StartDate AND S.ActionDate <= @EndDate;

我将我的两个变量映射为 0 和 1 的参数名称并运行它。

在此处输入图像描述

您描述的设置效果很好。要么你的问题比陈述的要多,要么还有其他的错位。跟随我的复制品并将其与您构建的内容进行比较,您应该会看到“关闭”的地方


推荐阅读