我的源表和目标表存在于不同的服务器上。我正在使用 Execute SQL Task
编写合并语句来同步它们。
有人可以解释我如何引用我的 Execute SQL Task
中不同服务器上存在的两个不同的数据库吗?
答案 0 :(得分:2)
我建议使用以下方法,而不是尝试在两个数据库服务器之间的 MERGE
中使用 Execute SQL Task
语句。
为每个SQL Server实例创建两个 OLEDB Connection Managers
。例如,如果您有两个数据库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问题的答案,了解详细步骤。
How do I optimize Upsert (Update and Insert) operation within SSIS package?
为每个SQL Server实例创建两个 OLEDB Connection Managers
。例如,如果您有两个数据库SourceDB和DestinationDB,则可以创建两个名为 OLEDB_SourceDB
和 OLEDB_DestinationDB
的连接管理器。
将Data Flow Task
拖放到控制流标签上。
在数据流任务中,配置 OLE DB Source
以从源数据库表中读取数据并使用 OLE DB Destination
在控制流标签上的 Execute SQL Task
之后放置 Data Flow Task
。编写一个在登台表和目标表之间使用MERGE语句的查询。
答案 1 :(得分:0)
请参阅此链接 - http://technet.microsoft.com/en-us/library/cc280522%28v=sql.105%29.aspx
基本上,为此,您需要使用数据流任务将来自不同服务器的数据放入同一位置,然后执行执行SQL任务以进行合并。
合并和合并加入SSIS数据流任务看起来不像他们想做的那样。