如何使用多个数据库服务器MERGE语句?(How can I use MERGE statement

2019-08-17 04:07发布

我的源和目标表在不同的服务器存在。 我使用的Execute SQL Task写MERGE语句对它们进行同步。

任何人都可以解释我是如何可以参考不同的服务器上存在我内的两个不同的数据库中Execute SQL Task

Answer 1:

可能的方法:

我建议,而不是试图用以下方法MERGE语句中Execute SQL Task两台数据库服务器之间。

方法一:

  • 创建两个OLEDB Connection Managers对每个SQL Server实例。 例如,如果你有两个数据库SOURCEDB和DestinationDB,您可以创建两个名为连接管理器OLEDB_SourceDBOLEDB_DestinationDB 。 你也可以使用ADO.NET连接管理器,如果你喜欢的。 根据我在基于SSIS的书看了,OLEDB性能比ADO.NET连接管理器更好。

  • 拖放一个Data Flow Task 控制流选项卡上。

  • 中的数据流任务 ,配置OLE DB Source读取从源数据库表中的数据。

  • 使用Lookup Transformation ,检查是否如果数据已经在目标表使用源和目标表之间的uniquer键存在。

  • 如果源表行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_SourceDBOLEDB_DestinationDB

  • 拖放一个Data Flow Task 控制流选项卡上。

  • 中的数据流任务 ,配置OLE DB Source读取从源数据库表中的数据,并插入到使用临时表OLE DB Destination

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



Answer 2:

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

基本上,要做到这一点,你需要从不同的服务器上的数据获取与数据流任务的同一个地方,然后执行执行SQL任务做了合并。

合并和合并联接SSIS数据流任务并不像他们做你想做的事。



文章来源: How can I use MERGE statement across multiple database servers?