Sql 如何跨多个数据库服务器使用MERGE语句?
我的源表和目标表存在于不同的服务器上。我正在使用Sql 如何跨多个数据库服务器使用MERGE语句?,sql,sql-server,ssis,Sql,Sql Server,Ssis,我的源表和目标表存在于不同的服务器上。我正在使用executesqltask编写合并语句来同步它们 有人能解释一下我如何引用我的执行SQL任务中不同服务器上的两个不同数据库吗?请参见此链接- 基本上,要做到这一点,您需要使用数据流任务将来自不同服务器的数据放到同一个位置,然后执行执行SQL任务来进行合并 “合并”和“合并加入SSIS数据流”任务看起来不像是执行您希望执行的操作。可能的方法: 我建议使用以下方法,而不是尝试在两台数据库服务器之间的executesqltask中使用MERGE语句 方
executesqltask
编写合并语句来同步它们
有人能解释一下我如何引用我的执行SQL任务中不同服务器上的两个不同数据库吗?请参见此链接-
基本上,要做到这一点,您需要使用数据流任务将来自不同服务器的数据放到同一个位置,然后执行执行SQL任务来进行合并
“合并”和“合并加入SSIS数据流”任务看起来不像是执行您希望执行的操作。可能的方法:
我建议使用以下方法,而不是尝试在两台数据库服务器之间的executesqltask
中使用MERGE
语句
方法1:
- 为每个SQL Server实例创建两个
OLEDB连接管理器。例如,如果您有两个数据库SourceDB和DestinationDB,则可以创建两个名为OLEDB\u SourceDB
和OLEDB\u DestinationDB
的连接管理器。如果您愿意,也可以使用ADO.NET连接管理器。根据我在基于SSIS的书籍中读到的内容,OLEDB的性能优于ADO.NET连接管理器
- 将
数据流任务
拖放到“控制流”选项卡上
- 在数据流任务中,配置一个
OLE DB源
,从源数据库表中读取数据
- 使用
Lookup Transformation
,在源表和目标表之间使用uniquer键检查数据是否已经存在于目标表中
- 如果源表行
在目标表中不存在
,则使用OLE DB destination将行插入目标表中
- 如果源表行
存在于目标表中
,则使用另一个OLE DB destination
将这些行插入目标数据库上的暂存表中
- 在“控制流”选项卡上的“数据流”任务之后放置一个
执行SQL任务。编写一个查询,使用临时表数据更新目标表中的数据
查看以下问题的答案,了解详细步骤
方法2:
- 为每个SQL Server实例创建两个
OLEDB连接管理器。例如,如果您有两个数据库SourceDB和DestinationDB,则可以创建两个名为OLEDB\u SourceDB
和OLEDB\u DestinationDB
的连接管理器
- 将
数据流任务
拖放到“控制流”选项卡上
- 在数据流任务中,配置
OLE DB源
,从源数据库表中读取数据,并使用OLE DB目标
将数据插入临时表
- 将
执行SQL任务
放在控制流选项卡上的数据流任务
之后。编写一个在临时表和目标表之间使用MERGE语句的查询
上述答案是对所问问题(imho)的正确答案,但应作为答案而不是评论输入。