如果我用delete / insert替换merge,会出问题吗?

时间:2016-09-23 16:10:50

标签: sql-server tsql merge

我有这个遗留代码......合并:

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替换合并会有什么问题吗?

1 个答案:

答案 0 :(得分:2)

问题是您可以使用merge语句来实现初始和增量加载。但是如果你想使用普通插入,有时即使你只是进行插入操作也会很难。你真的想先截断目标表,然后每次想要进行增量加载时再重新加载吗?

另一个问题是,如果你试图实现类型2 SCD,普通插入和更新语句将非常复杂和混乱,但是合并语句非常有效和快速。