我有一个STG表,我们每天从2个SRC表中截断并将值加载到STG表中。我在STG表中创建了一个Change标志(Ch_Flg),这样我们就不会每天截断表格,只有当SRC中的某些字段发生变化时,我们才会将值插入STG。
但是,由于SRC表直接加载到STG,我需要一个临时表,我可以存储所有SRC记录,如果记录已经更改,则检查STG,只有当这些记录发生变化时才插入STG。
例如,SRC1表包含(ID,Name,Tag,Sector,Dept,City,Phone,HireDate等)列,SRC2包含(ID,Name,Competency,City,Phone等)列
我应该将SRC中的所有值加载到临时表中,然后将它们与STG表进行比较吗?或者有更有效的方法吗?
答案 0 :(得分:0)
您可以将它们加载到临时表中,然后执行类似这样的操作
WITH SINGLES AS
(
SELECT t1.ID
FROM <sourcetablename> t1
LEFT JOIN <desttablename> t2
ON (t1.id = t2.id)
WHERE t2.id IS NULL
)
INSERT <tabletherecordswillbeinserted>(ID, <otherfield>, <otherfield2>)
SELECT S.id, S.<otherfield1>, s.<otherfield2>
From singles S
Left Join <sourcetablename> on S.id = <desttable>.id
Where <desttable>.id Is Null
您可能需要在代码中添加更改标记,但这是一般的想法,您可以将更改标记放在CTE语句中