检测两个表中记录之间的更改
本文关键字:之间 记录 两个 检测 | 更新日期: 2023-09-27 18:35:51
我有 3 个表:
- 暂存:每月插入员工记录。
- 主:表包含以前从暂存中输入的所有记录,唯一记录。 更改
- :跟踪所有更改 - 没有主键。
这些表有 10 列。在临时表中,我们每个月都有大约 2,500,000 条记录。使用游标,我可以将新记录从暂存插入到主表中。
在更新方面,我使用内部联接从主表中已存在的暂存中获取记录。
要了解是否有任何员工信息已更改,我是否必须查询以下内容:
WHERE Staging.FirstName <> Master.FirstName
OR Staging.LastName <> Master.LastName
OR ...
依此类推 10 列,还是有更简单的方法?
如果这两个表确实相同,则可以在每个表中创建一个持久计算列,该列表示整行的校验和(请参阅 http://technet.microsoft.com/en-us/library/ms189788.aspx),在此基础上创建一个索引,然后将其用于连接。
使用游标处理数百万行听起来并不有趣。
也许你应该看看 EXCEPT/MERGE
WITH NewAndChanged AS (
SELECT Stage.Id
,Stage.Col1
,Stage.Col2
FROM Stage
EXCEPT
SELECT Master.Id
,Master.Col1
,Master.Col2
FROM Master
)
MERGE Master
USING NewAndChanged
ON Master.Id = NewAndChanged.Id
WHEN MATCHED
THEN UPDATE SET
Col1 = NewAndChanged.Col1
,Col2 = NewAndChanged.Col2
WHEN NOT MATCHED
THEN INSERT (
Id
,Col1
,Col2
)
VALUES (
NewAndChanged.Id
,NewAndChanged.Col1
,NewAndChanged.Col2
)