2016-12-08 2 views
0

Я держу под таблицами синхронно.проблемы с синхронизацией, некоторые столбцы не обновляются

От источника к DW, я:

SELECT @UpdateDate = MAX(UpdateDate) 
FROM [ReplicatedVS3].[dbo].[Payment] 


SELECT * INTO #temp  
FROM [LinkedServer].[SF].[dbo].[Payment] 
WHERE UpdateDate >= @UpdateDate 


DELETE FROM [ReplicatedVS3].[dbo].[Payment]   
FROM [ReplicatedVS3].[dbo].[Payment] AS A  
INNER JOIN #temp AS t   
    ON A.Payment_id = t.Payment_id 

INSERT INTO [ReplicatedVS3].[dbo].[Payment] SELECT * FROM #temp 

Отлично! У меня никогда не было никаких проблем с этим.

Тогда другой перевод я в тот же SQL, например этот раз:

SELECT @LastUpdateDate = MAX(UpdateDate) 
FROM [BS].[dbo].[Salesforce_Payment] 


insert @PaymentsVS3 
select (columns…) 
from [ReplicatedVS3].[dbo].[Payment] 
where UpdateDate >= @LastUpdateDate 


merge [BS].[dbo].[Salesforce_Payment] as TARGET 
    using (
      select (columns…) 
      from @PaymentsVS3 
      ) 
      as SOURCE 
    on (TARGET.Payment_id = SOURCE.Payment_id) 

я нашел проблемы; счет всегда идеален ... но некоторые столбцы не обновляются, например, в ReplicatedVS3. Я вижу статус = «завершен», а в BS я вижу другой ... Так что это означает, что с кодом слияния что-то не так ... Но , когда я запускаю его вручную и я:

insert @PaymentsVS3 
select (columns…) 
from [ReplicatedVS3].[dbo].[Payment] 
where id = xxxx 

он обновляется должным образом, так что слияние работает идеально ... Единственная возможная причина, в настоящее время является то, что я не поймать запись в этом немного:

insert @PaymentsVS3 
select (columns…) 
from [ReplicatedVS3].[dbo].[Payment] 
where UpdateDate >= @LastUpdateDate 

Как устранить эту проблему и точно знать, почему я вижу столбцы, которые не обновляются.

ответ

0

MERGE не работает на столбцах, он работает на строках. Конечно, вы можете обновлять только определенные столбцы для строк, которые вызывают UPDATE, но разные разделы оператора слияния работают с строками данных. Одна быстрая проверка, имеет ли SOURCE и/или TARGET дубликат Payment_id?

Вы можете отладить заявление MERGE, используя предложение OUTPUT. Это позволит вам увидеть, какие строки были вставлены, обновлены и удалены. Этот пост дает хороший обзор этого метода: Merge/Output

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