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

时间:2015-10-22 17:53:18

标签: sql-server ssis

好吧,这似乎应该是非常容易的,但我无法弄清楚。我在网上看到的每个地方都说要创建临时表和VB脚本,我不敢相信我必须这样做。我的目标是在表中插入所有记录,其日期晚于该目标表中的最大日期。 UPDATE 这两个表位于两个不同的非链接SQL数据库中  所以:

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

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

我想在SSIS中这样做。我声明了一个变量,SQL执行步骤看起来就是将单行输出分配给它。但是当我进入数据流时,它没有给我任何参数选择,当我强制在项目范围内的已知参数时,它表示没有参数存在

2 个答案:

答案 0 :(得分:1)

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

创建一个名为max_date的变量,并使其数据类型为String。

在控制流上放置一个执行SQL任务,将其连接类型更改为OLE DB,对于连接,选择包含Table2的数据源的名称。将ResultSet设置为Single Row。为SQLStatement添加以下内容:

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] + "'"

答案 1 :(得分:0)

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

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

如果要在控制流中使用多个Execute SQL Task项,或者想要在数据流中使用该参数,则必须更改{{1}的General > Result Set选项查询到MAX(),然后从Single Row移到GeneralResult Set为您的结果集占用一个新变量。

要通过AddINSERT INTO....查询中使用该变量,您将为每个参数构建一个Execute SQL Task的查询,并将它们映射到参数映射部分。如果在查询中多次使用变量,则最容易使用存储过程,因此您只需在SSIS中传递相关参数。