1

我的源和目标表存在于不同的服务器上。我正在使用Execute SQL Task编写合并语句来同步它们。

谁能解释我如何引用我内部不同服务器上存在的两个不同数据库Execute SQL Task

4

2 回答 2

2

可能的方法:

我建议采用以下方法,而不是尝试在两个数据库服务器之间使用MERGE语句。Execute SQL Task

方法#1:

  • OLEDB Connection Managers为每个 SQL Server 实例创建两个。例如,如果您有两个数据库 SourceDB 和 DestinationDB,您可以创建两个名为OLEDB_SourceDB和的连接管理器OLEDB_DestinationDB。如果您愿意,也可以使用 ADO.NET 连接管理器。根据我在基于 SSIS 的书籍中阅读的内容,OLEDB 的性能优于 ADO.NET 连接管理器。

  • 将 a 拖放Data Flow Task到“控制流”选项卡上。

  • Data Flow Task中,配置一个OLE DB Source从源数据库表中读取数据。

  • 使用Lookup Transformation它使用源表和目标表之间的唯一键检查数据是否已存在于目标表中。

  • 如果目标表中的源表行does not exist,则使用插入行到目标表中OLE DB Destination

  • 如果源表行在exists目标表中,则使用另一个OLE DB Destination.

  • 在控制流选项卡Execute SQL Task上的数据流任务之后放置一个。编写一个查询,该查询将使用临时表数据更新目标表中的数据。

检查以下 SO 问题的答案以获取详细步骤。

如何优化 SSIS 包中的 Upsert(更新和插入)操作?

方法#2:

  • OLEDB Connection Managers为每个 SQL Server 实例创建两个。例如,如果您有两个数据库 SourceDB 和 DestinationDB,您可以创建两个名为OLEDB_SourceDB和的连接管理器OLEDB_DestinationDB

  • 将 a 拖放Data Flow Task到“控制流”选项卡上。

  • 数据流任务中,配置一个OLE DB Source以从源数据库表中读取数据并使用OLE DB Destination.

  • Execute SQL Task控制流选项卡Data Flow Task上放置一个。编写一个在临时表和目标表之间使用 MERGE 语句的查询。

于 2013-02-25T13:37:12.390 回答
0

请参阅此链接 - http://technet.microsoft.com/en-us/library/cc280522%28v=sql.105%29.aspx

基本上,要做到这一点,您需要使用数据流任务将来自不同服务器的数据获取到同一个位置,然后执行执行 SQL 任务来进行合并。

Merge 和 Merge Join SSIS Data Flow 任务看起来不像您想做的那样。

于 2013-02-25T12:39:27.047 回答