【发布时间】:2022-12-01 02:33:57
【问题描述】:
我有两个插入语句。如果目标表中不存在 id,第一个查询是插入一个新行。第二个查询只有当joined id hash值不同(表示该行已经在源表中被更新)并且源表中的id不为null时才插入到目标表中。这些解决方案旨在用于我的 SCD2 解决方案,它将用于插入数十万行。我尽量不使用 MERGE 语句进行练习。
“当前”列值 1 表示该行是新行,0 表示该行已过期。稍后我使用此信息通过更新查询使目标表中的行过期。
除了索引之外,是否还有一种更有效的方法来改进我的插入查询,其方式类似于用于插入新/更新行的 SCD2 合并语句?
询问:
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
【问题讨论】:
标签: sql sql-server tsql etl data-warehouse