私はテーブルの同期を保ちます。同期の問題、特定の列が更新されない
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
それが適切に更新されるので、マージが完璧に働いている...唯一の可能な理由は、今、私は、このビットのレコードを引くわけではないということです
これをトラブルシューティングして、列が更新されない理由を正確に知ることができます。