SSIS将数据从一个表复制到另一个表,而不是在目标表中

时间:2010-03-19 11:36:32

标签: sql-server-2008 ssis

我正在服务器(server1)上创建一个SSIS包,该服务器查看另一个站点(server2)上的sql db中的数据并复制相关的行。

所需的SQL语句是:

SELECT *
FROM server2.ordersTable
WHERE
OrderID Not In (SELECT OrderID FROM server1.ordersTable

这将从server1中选择不在server2上的表中的数据(基于订单ID) 然后我需要将结果插入server1上的表

我该如何处理?我需要哪些组件等...?

3 个答案:

答案 0 :(得分:1)

假设您可以在server2上使用OPENQUERY或直接链接服务器连接到server1(如您的示例或@ schrodinger代码中的答案),这将是最小化线路数据的最佳解决方案。

但如果没有,你还有两个选择:

1)您可以使用SSIS中的查找数据流转换来检查现有OrderID的记录,并仅使用条件拆分转换来推送新记录。

2)您可以将整个表从Server2转移到Server1上的临时表中,然后使用您发布的代码的变体在Server1上进行比较。

答案 1 :(得分:1)

意识到这是一个老线程......

如果您想在SSIS中执行此操作,我建议使用以下数据流:

  • 两个数据源。
  • 来源A选择您要移动的所有数据
  • 来源B从目的地
  • 中选择密钥
  • 将两个源都运行到配置为左连接的合并连接
  • 将连接结果运行到条件拆分中,定义输出,其中源B的键为空
  • 将拆分的相应输出运行到目标,该目标在相应的表中插入所需的行。

可以进行许多增强以支持其他功能,例如处理更新和删除。还有一些性能调优技巧可以根据数据量的要求应用,其中最简单的方法是检查源数据的修改日期与上次运行包的时间,以减少源A选择的记录数。

答案 2 :(得分:0)

你可以为其中一个服务器创建一个链接服务器,首先说服务器1的LinkedServer1然后你就可以使用OPENQUERY了:

SELECT * FROM server2.OrdersTable 哪里 订单ID不在 (  SELECT OrderID  FROM OPENQUERY(LinkedServer,'SELECT OrderID FROM LinkedServer1.OrdersTable) )