Как мне быстрее выполнить слияние из источника связанного сервера? - PullRequest
0 голосов
/ 19 июня 2020

Я использую приведенный ниже сценарий для слияния из таблицы связанного сервера. Слияние выполняется без ошибок, но обработка миллиона записей занимает больше времени. Как я могу запустить это быстрее, используя OpenQuery или что-то в этом роде? может быть другой способ обработки этого слияния?

merge [destinationtable] a
using linkedServer.dbo.[sourcetable]  b
on  b.[Store No_]  COLLATE SQL_Latin1_General_CP1_CI_AS       =  a.[StoreNo]
and b.[POS Terminal No_] COLLATE SQL_Latin1_General_CP1_CI_AS =  a.[POSTerminalNo]
and b.[Transaction No_]   =  a.[TransactionNo]
and b.[Line No_]    =  a.[LineNo]


when matched and a.[ReceiptNo]          COLLATE SQL_Latin1_General_CP1_CI_AS        <>  b.[Receipt No_]
              OR a.[ItemNo]             COLLATE SQL_Latin1_General_CP1_CI_AS        <>  b.[Item No_]
              OR a.[ItemCategoryCode]   COLLATE SQL_Latin1_General_CP1_CI_AS        <>  b.[Item Category Code]
              OR a.[ProductGroupCode]   COLLATE SQL_Latin1_General_CP1_CI_AS        <>  b.[Product Group Code]
              OR a.[Price]                      <>  b.[Price]
              OR a.[NetPrice]                   <>  b.[Net Price]



then
update  
SET  

    a.[ReceiptNo]                =  b.[Receipt No_]
   ,a.[ItemNo]                   =  b.[Item No_]
   ,a.[ItemCategoryCode]         =  b.[Item Category Code]
   ,a.[ProductGroupCode]         =  b.[Product Group Code]
   ,a.[Price]                    =  b.[Price]
   ,a.[NetPrice]                 =  b.[Net Price]




when not matched by target
then
insert (
      [Store No_]
      ,[POS Terminal No_]
      ,[Line No_]
      ,[ReceiptNo]
      ,[ItemNo]
      ,[ItemCategoryCode]
      ,[ProductGroupCode]
      ,[Price]
      ,[NetPrice]


      )

values(
      b.[Store No_]
      ,b.[POS Terminal No_]
      ,b.[Line No_]
      ,b.[Receipt No_]
      ,b.[Item No_]
      ,b.[Item Category Code]
      ,b.[Product Group Code]
      ,b.[Price]
      ,b.[Net Price]

      )

when not matched by source
then Delete;
...