2016-12-08 6 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에서 일부 열은 예를 들어 업데이트되지 않습니다. status = 'completed'를 보았고 BS에서 다른 것을 봅니다 ... 그래서 병합 코드에 문제가 있음을 의미합니다 ... 그러나 내가 수동으로 실행할 때 내가 할 :

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

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

가 제대로 업데이트됩니다, 그래서 병합이 완벽하게 작동하고 ... 유일하게 가능한 이유는 지금은이 비트에 기록을 잡기 있지 않다이다

어떻게이 문제를 해결할 수 있고, 내가 열이 업데이트되지 않는 볼 이유를 정확히 알고있다.

답변

0

MERGE 는 행에서 작동, 열 작동하지 않습니다. 물론 UPDATE을 트리거하는 행에 대해 특정 열만 업데이트 할 수 있지만 병합 명령문의 다른 섹션은 데이터 행에서 작동합니다. 한 빠른 검사는 SOURCE을 수행하고/또는 TARGET 중복 Payment_id 년대 있나요?

당신은 OUTPUT 절을 사용하여 MERGE 문을 디버깅 할 수 있습니다. 이렇게하면 삽입, 업데이트 및 삭제 된 행을 볼 수 있습니다. 이 게시물은이 방법에 대한 개요를 제공합니다. Merge/Output