ssis - 如何使用具有不同日期值的相同 SSIS 数据流?
问题描述
我有一个非常简单的 SSIS 包,其中包含一个数据流,该数据流由一个 OLEDB 源和一个平面文件目标组成。OLEDB 源调用采用 2 组参数的查询。我已将参数映射到日期/时间变量。
我想知道如何最好地将 4 组不同的日期传递给变量并在我的查询中使用这些值?
我已经使用项目枚举器对 For Each 循环容器进行了试验。但是,这似乎不起作用,并且包会引发 System.IO.IOException 错误。
我的容器配置如下: 请注意,这两个变量都是日期/时间数据类型。
如何将 4 个单独的值集传递给相同的变量并使用每个变量对来运行我的数据流?
解决方案
设置
我创建了一个表并用您的样本集的连续数据填充它
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 的参数名称并运行它。
您描述的设置效果很好。要么你的问题比陈述的要多,要么还有其他的错位。跟随我的复制品并将其与您构建的内容进行比较,您应该会看到“关闭”的地方
推荐阅读
- hash - 如何从我尝试过多种方式但无法正常工作的 sqlmap 输出中解密以下哈希
- c - 甚至是列表的反向
- math - 按顺序仅使用字母(A 或 a ...)的字符算术
- c - 如何为arduino编写C代码以使用屏幕
- javascript - 在 Android Studio 后台自动登录网站
- css - 布局在 Google Chrome 上看起来很完美,但在 Mozilla Firefox 上却不行
- vue.js - Vue.js 在 v-if 条件下绑定元素的 :value
- python - 将驱动程序从 android 应用程序切换到具有 appium 的浏览器
- php - 带循环的函数php
- firebase - 如何在flutter firebase中使用fromJson将数据存储到模型中?