Select @[User::Dated] = MAX(Dateof) from Table2
Insert into Table2
Select *
From Table1
Where DateOf > @[User::Dated]
我想在SSIS中这样做。我声明了一个变量,SQL执行步骤看起来就是将单行输出分配给它。但是当我进入数据流时,它没有给我任何参数选择,当我强制在项目范围内的已知参数时,它表示没有参数存在
答案 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
移到General
并Result Set
为您的结果集占用一个新变量。
要通过Add
在INSERT INTO....
查询中使用该变量,您将为每个参数构建一个Execute SQL Task
的查询,并将它们映射到参数映射部分。如果在查询中多次使用变量,则最容易使用存储过程,因此您只需在SSIS中传递相关参数。