我有两个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
1条答案
按热度按时间okxuctiv1#
您可以使用
WHERE NOT EXISTS
,并且只有一个INSERT
语句: