2015-05-21 5 views
1

Я пытаюсь обновить записи в таблице Sql Server 2012 с помощью оператора MERGE. У меня есть целевая таблица и моя исходная таблица. Когда поле ID совпадает, я хочу заменить всю строку соответствующей строкой из источника, а если нет, добавьте строку в таблицу как новую строку. Я не знаю, что написать после набора обновлений (?), Чтобы достичь этого. Вот мой код:Merge Statement, переписывающий целую строку, если соответствует

USE DataCompany 
MERGE INTO MasterAddress ma 
    USING MasterAddressStaging ms 
     ON MasterAddress.ID = MasterAddressStaging.ID 
WHEN MATCHED THEN 
    UPDATE SET (?) 
WHEN NOT MATCHED THEN 
INSERT (ID 
     ,CompanyName 
     ,CompanyNumber 
     ,RegAddress_CareOf 
     ,RegAddress_POBox 
     ,RegAddress_AddressLine1 
     ,RegAddress_AddressLine2 
     ,RegAddress_PostTown 
     ,RegAddress_County 
     ,RegAddress_Country 
     ,RegAddress_PostCode) 
VALUES (ms.ID 
     ,ms.CompanyName 
     ,ms.CompanyNumber 
     ,ms.RegAddress_CareOf 
     ,ms.RegAddress_POBox 
     ,ms.RegAddress_AddressLine1 
     ,ms.RegAddress_AddressLine2 
     ,ms.RegAddress_PostTown 
     ,ms.RegAddress_County 
     ,ms.RegAddress_Country 
     ,ms.RegAddress_PostCode); 

спасибо за вашу помощь

ответ

2
USE DataCompany 
    MERGE INTO MasterAddress ma 
    USING MasterAddressStaging ms 
     ON ma.ID = ms.ID 
    WHEN MATCHED THEN 
    UPDATE SET ma.CompanyName = ms.CompanyName, 
       ma.CompanyNumber = ms.CompanyNumber, 
       ma.RegAddress_CareOf =ms.RegAddress_CareOf, 
       ma.RegAddress_POBox =ms.RegAddress_POBox, 
       ma.RegAddress_AddressLine1 = ms.RegAddress_AddressLine1, 
       ma.RegAddress_AddressLine2 = ms.RegAddress_AddressLine2, 
       ma.RegAddress_PostTown = ms.RegAddress_PostTown, 
       ma.RegAddress_County = ms.RegAddress_County, 
       ma.RegAddress_Country = ms.RegAddress_Country, 
       ma.RegAddress_PostCode = ms.RegAddress_PostCode 
    WHEN NOT MATCHED THEN 
    INSERT (ID 
      ,CompanyName 
      ,CompanyNumber 
      ,RegAddress_CareOf 
      ,RegAddress_POBox 
      ,RegAddress_AddressLine1 
      ,RegAddress_AddressLine2 
      ,RegAddress_PostTown 
      ,RegAddress_County 
      ,RegAddress_Country 
      ,RegAddress_PostCode) 
    VALUES (ms.ID 
      ,ms.CompanyName 
      ,ms.CompanyNumber 
      ,ms.RegAddress_CareOf 
      ,ms.RegAddress_POBox 
      ,ms.RegAddress_AddressLine1 
      ,ms.RegAddress_AddressLine2 
      ,ms.RegAddress_PostTown 
      ,ms.RegAddress_County 
      ,ms.RegAddress_Country 
      ,ms.RegAddress_PostCode); 

Смотрите примеры here

+0

если кто-то имеет тот же вопрос и используя псевдонимы, они должны быть последовательны в заявлении о –

+0

необходимо определить каждый столбец? есть ли способ вставить/обновить всю строку в более короткой строке? – HEDMON

Смежные вопросы