Я использую приведенный ниже сценарий для слияния из таблицы связанного сервера. Слияние выполняется без ошибок, но обработка миллиона записей занимает больше времени. Как я могу запустить это быстрее, используя 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;