我有这个遗留代码......合并:
MERGE [Salesforce_Lead] AS target
using (
SELECT lead_id,
salesforce_id,
createdbyid,
email,
updatedate
FROM Source.Leads ) AS source
ON (
target.lead_id = source.lead_id)
WHEN matched
AND Checksum(target.lead_id, target.salesforce_id) <> Checksum(source.lead_id,source.salesforce_id)
OR Checksum(target.lead_id, target.createdbyid) <> Checksum(source.lead_id,source.createdbyid)
OR Checksum(target.lead_id, target.email) <> Checksum(source.lead_id,source.email)
OR Checksum(target.lead_id, target.updatedate) <> Checksum(source.lead_id,source.updatedate)
THEN
UPDATE
SET target.salesforce_id = source.salesforce_id,
target.createdbyid = source.createdbyid,
target.email = source.email,
target.updatedate = source.updatedate,
when not matched BY target THEN
INSERT
(
lead_id,
salesforce_id,
createdbyid,
email,
updatedate,
)
VALUES
(
source.lead_id,
source.salesforce_id,
source.createdbyid,
source.email,
source.updatedate
)
我想为以下代码更改它:
DELETE FROM [dbo].[Salesforce_Lead]
FROM [dbo].[Salesforce_Lead] AS L
INNER JOIN Source.Leads AS t
ON L.lead_id = t.lead_id;
INSERT INTO [dbo].[lead]
SELECT *
FROM Source.Leads
原因: - 更短的代码,更易于维护。 - 我认为如果您从源代码中删除,或使用OUTPUT子句,则应该使用MERGE ... - 没有太多更新,通常是普通插入。
我错过了什么吗?我通过“匹配时”获得的性能是我应该使用MERGE的唯一原因,但正如我所说的,大多数是插入。如果我用delete / insert替换合并会有什么问题吗?
答案 0 :(得分:2)
问题是您可以使用merge语句来实现初始和增量加载。但是如果你想使用普通插入,有时即使你只是进行插入操作也会很难。你真的想先截断目标表,然后每次想要进行增量加载时再重新加载吗?
另一个问题是,如果你试图实现类型2 SCD,普通插入和更新语句将非常复杂和混乱,但是合并语句非常有效和快速。