【问题标题】:How to use the same SSIS Data Flow with different Date Values?如何使用具有不同日期值的相同 SSIS 数据流?
【发布时间】:2021-05-07 17:57:42
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • startDateendDAte2018的数据类型是什么?
  • @billinkc 它们都是日期/时间数据类型。

标签: ssis


【解决方案1】:

设置

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

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 容器正在工作,数据流就变得微不足道了。

我使用像这样的参数化查询在带有 OLE DB 源的 foreach 循环内添加了一个数据流

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 并运行它。

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

【讨论】:

  • 谢谢!有没有办法在不定义数据库表的情况下使用相同的方法?也就是说,我希望变量只在 SSIS 包中定义,而不依赖于数据库的值。
  • 我的数据库表是为了模拟你的The OLEDB source calls a query that takes 2 sets of parameters 我填充了数据只是为了确保我有预期的边界条件。替换您的表格和列,使其适用于您的用例。人们遇到的最大挑战是获取参数以在 ForEach 循环上对齐。
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2021-03-20
  • 1970-01-01
相关资源
最近更新 更多