【发布时间】:2016-12-08 17:48:21
【问题描述】:
我保持下表同步。
从源到 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 id = xxxx
它得到了正确的更新,所以合并工作很完美……现在唯一可能的原因是我没有捕捉到这一点的记录:
insert @PaymentsVS3
select (columns…)
from [ReplicatedVS3].[dbo].[Payment]
where UpdateDate >= @LastUpdateDate
我该如何解决这个问题,并确切知道为什么我看到列没有更新。
【问题讨论】:
标签: sql-server tsql merge