我的源和目标表在不同的服务器存在。 我使用的Execute SQL Task
写MERGE语句对它们进行同步。
任何人都可以解释我是如何可以参考不同的服务器上存在我内的两个不同的数据库中Execute SQL Task
?
我的源和目标表在不同的服务器存在。 我使用的Execute SQL Task
写MERGE语句对它们进行同步。
任何人都可以解释我是如何可以参考不同的服务器上存在我内的两个不同的数据库中Execute SQL Task
?
我建议,而不是试图用以下方法MERGE
语句中Execute SQL Task
两台数据库服务器之间。
创建两个OLEDB Connection Managers
对每个SQL Server实例。 例如,如果你有两个数据库SOURCEDB和DestinationDB,您可以创建两个名为连接管理器OLEDB_SourceDB
和OLEDB_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(更新和插入)操作?
创建两个OLEDB Connection Managers
对每个SQL Server实例。 例如,如果你有两个数据库SOURCEDB和DestinationDB,您可以创建两个名为连接管理器OLEDB_SourceDB
和OLEDB_DestinationDB
。
拖放一个Data Flow Task
控制流选项卡上。
中的数据流任务 ,配置OLE DB Source
读取从源数据库表中的数据,并插入到使用临时表OLE DB Destination
。
放置一个Execute SQL Task
后Data Flow Task
控制流选项卡上。 编写将使用临时表和目标表之间的MERGE语句的查询。
请参阅此链接- http://technet.microsoft.com/en-us/library/cc280522%28v=sql.105%29.aspx
基本上,要做到这一点,你需要从不同的服务器上的数据获取与数据流任务的同一个地方,然后执行执行SQL任务做了合并。
合并和合并联接SSIS数据流任务并不像他们做你想做的事。