Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何跨多个数据库服务器使用MERGE语句?_Sql_Sql Server_Ssis - Fatal编程技术网

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)的正确答案,但应作为答案而不是评论输入。