SSIS SQL TASK MAX(DATE) 到 DATA FLOW 中的变量

SSIS SQL TASK MAX(DATE) to Variable in DATA FLOW

好的,这看起来应该非常简单,但我想不通。我在网上看到的每个地方都说要创建临时 tables 和 VB 脚本,我不敢相信我必须这样做。我的目标是将所有记录插入 table 中,日期晚于该目标 table 中的最大日期。 更新 2 table 位于两个不同的非链接 SQL 数据库中 所以:

Select @[User::Dated] = MAX(Dateof) from Table2

Insert into Table2
Select *
From Table1
Where DateOf > @[User::Dated]

我正尝试在 SSIS 中执行此操作。我声明了一个变量,SQL 执行步骤看起来像是将单行输出分配给它。但是当我进入数据流时,它没有给我选择的参数,当我强制使用项目范围内的已知参数时,它说没有参数存在

如果需要,您可以在单个 SQL 任务中执行此操作:

Insert into Table2
Select *
From Table1
Where DateOf > (Select MAX(Dateof) from Table2)

如果你想在控制流中使用多个 Execute SQL Task 项,或者想在数据流中使用参数,你必须为你的 MAX() 查询到 Single Row,然后从 General 移动到 Result SetAdd 为您的结果集占用的新变量。

要通过 Execute SQL TaskINSERT INTO.... 查询中使用该变量,您需要为每个参数构建一个 ? 的查询,并将它们映射到参数映射部分。如果一个变量在一个查询中被多次使用,那么使用存储过程是最简单的,所以你可以简单地在SSIS中传递相关参数。

创建两个 OLE DB 数据源,每个数据源指向您的两个数据库。

创建一个名为 max_date 的变量并将其数据类型设置为字符串。

在控制流上放置一个执行 SQL 任务,将其连接类型更改为 OLE DB,并为连接 select 包含 Table2 的数据源的名称。将结果集设置为单行。为 SQL 语句添加以下内容:

SELECT CAST(MAX(Dateof) AS VARCHAR) AS max_date FROM Table2

转到“结果集”窗格,单击“添加”并输入以下内容:

Result Name: max_date
Variable Name: User::max_date

您现在可以在表达式中使用 max_date 变量来创建 SQL 语句,例如您可以在另一个使用第二个数据的执行 SQL 任务中使用它连接方式如下:

"INSERT INTO Table2
SELECT *
FROM Table1
WHERE DateOf > '" + @[User::max_date] + "'"

或者在数据流中的 OLE DB 源中,如下所示:

"SELECT *
FROM Table1
WHERE DateOf > '" + @[User::max_date] + "'"