SQL Server 改进SCD2解决方案的插入查询

wz3gfoph  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(106)

我有两个insert语句。第一个查询是在目标表中不存在id的情况下插入一个新行。第二个查询仅在连接的id哈希值不同时才插入到目标表中(表示该行已在源表中更新)并且源表中的id不为空。这些解决方案将用于我的SCD 2解决方案,它将用于插入成千上万行。我尝试不使用MERGE语句进行练习。
“Current”列的值为1表示该行是新的,0表示该行已过期。我稍后使用此信息通过更新查询使目标表中的行过期。
除了建立索引之外,是否有一种更有能力和更有效的方法来改进我的插入查询,其方式类似于用于插入新的/更新的行的SCD 2合并语句?
查询:

Query 1:
INSERT INTO TARGET
SELECT Name,Middlename,Age, 1 as current,Row_HashValue,id
from Source s
Where s.id not in (select id from TARGET) and s.id is not null

Query 2:
INSERT INTO TARGET
SELECT Name,Middlename,Age,1 as current ,Row_HashValue,id
FROM SOURCE s 
LEFT JOIN TARGET t ON s.id = t.id
AND s.Row_HashValue = t.Row_HashValue
WHERE t.Row_HashValue IS NULL and s.ID IS NOT NULL
okxuctiv

okxuctiv1#

您可以使用WHERE NOT EXISTS,并且只有一个INSERT语句:

INSERT INTO TARGET
SELECT Name,Middlename,Age,1 as current ,Row_HashValue,id
FROM SOURCE s 
WHERE NOT EXISTS (
    SELECT 1
    FROM TARGET t 
    WHERE s.id = t.id
    AND s.Row_HashValue = t.Row_HashValue)
AND s.ID IS NOT NULL;

相关问题