2016-12-08 7 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をトリガーする行に対しては特定の列のみを更新できますが、マージステートメントの異なるセクションはデータの行に作用します。 1つのクイックチェック、SOURCEおよび/またはTARGETにはPayment_idが重複していますか?

MERGEステートメントをOUTPUT句を使用してデバッグできます。これにより、挿入、更新、および削除された行を確認することができます。この投稿は、この方法の概要を示しています。Merge/Output

関連する問題