在条件下将数据从本地表转移到链接服务器对象的表

时间:2016-02-17 09:00:18

标签: sql-server sql-server-2008 sql-server-2012

我在我的系统上配置了一个链接服务器对象“DIS”,用于访问远程数据库。我通过使用代码段[DIS]。[DISTemp]。[dbo]。[Agency]。

来访问它。

我的本​​地数据库上有一个表tbBroker。现在我必须将数据从本地机器的tbBroker传输到DIS的表代理。两个表中的列映射如下

CustomAdapter

现在我必须根据条件将数据从本地机器传输到DIS。

检查DIS的[Agency]表中是否存在代理商。使用来自tbBroker的BrokerCode(来自本地机器)进行验证。

  • 如果存在

    更新DIS的代理商表中的记录。

  • 如果不存在

    在DIS的Agency表中插入记录。

enter image description here

请帮帮我!!!

1 个答案:

答案 0 :(得分:1)

鉴于我从您的问题中理解,我认为您最好使用MERGE声明。

由于无法将MERGE的目标设置为远程表,因此需要在远程数据库上执行以下操作,并链接回源。

USE [DISTemp];

MERGE INTO
  [dbo].[Agency] AS [TARGET]
USING
  [<<sourceDB>>].[dbo].[tbBroker] AS [SOURCE]
ON
  [TARGET].[AgencyNumber] = [SOURCE].[BrokerCode]
WHEN NOT MATCHED BY TARGET THEN
  INSERT (    
    [AgencyNumber]
  , [AgencyName]
  , [WebsiteUrl]
  , [City]
  , [EmailAddress]  
  )
  VALUES (
    [SOURCE].[BrokerCode]
  , [SOURCE].[BusinesssName]
  , [SOURCE].[WebsiteUrl]
  , [SOURCE].[City]
  , [SOURCE].[Email]
  )
WHEN MATCHED THEN
  UPDATE SET
    [TARGET] = [AgencyNumber] = [SOURCE].[BrokerCode]
  , [TARGET] = [AgencyName]   = [SOURCE].[BusinesssName]
  , [TARGET] = [WebsiteUrl]   = [SOURCE].[WebsiteUrl]
  , [TARGET] = [City]         = [SOURCE].[City]
  , [TARGET] = [EmailAddress] = [SOURCE].[Email];