SSIS从一台服务器/数据库向另一台服务器/数据库插入连续数据
我有 2 个不同的服务器(Server1 和 Server2)。每个上都有一个具有相似结构的数据库(db1 和 db2)。db1 中有连续的数据插入。
我想要一项工作,使用 SSIS 和 SQL Server 代理作为调度程序,按每日计划将数据从一台服务器 (db1) 提取到另一台服务器 (db2)。我只想将新数据(未在早期作业中传输的数据)传输到 db2。
为此,我想从 db2 中选择最后一个 Id 并使用它来仅传输来自 db1 的具有更高 id 的数据。
这个概念本身有效,但我不知道如何用 SSIS 实现它。
在 SSIS 中,我尝试使用 SQL 执行任务并将其安全地放入变量中:
第一个任务(以保护变量中的 id):
SELECT TOP (1) [ID] FROM [DB2] ORDER BY ID DESC
第二个任务(将行安全地放入对象变量中):
SELECT * FROM [DB1] where ID > ?
那行得通,但是如何将对象变量插入到 db2.xml 文件中?
有没有更干净的方法,比如:
Insert into Server2.[db2] select * from Server1.[db1] where ID > ?
问题是,SSIS 只允许每个 SQL 执行一个连接(数据流任务也有同样的问题)。
我还考虑了临时表。但我不确定这是否是正确的方法。
如果有人有想法/提示会很棒。我还没有找到太多关于此的信息,我想这是一项简单的任务。
非常感谢。
回答
你已经到了那里。只需使用数据流任务而不是执行 SQL 任务。一个数据流可以有两个不同的连接。
- 获取最后一个 id 并将其放入一个带有 ExecuteSQL 任务的变量中。然后连接一个数据流任务
- 使用源和目标配置数据流任务
- 在此示例中,我们将 OLEDB 源与 SQL 命令一起使用,该 SQL 命令接受使用“?”的参数。
- 我们点击参数按钮并选择我们想要映射到它的变量
- 最后,通过单击目标,选择服务器连接管理器和表,然后单击映射选项卡,将目标中的字段映射到第二台服务器