如果来自src的值已更改,则将记录插入表中

时间:2016-07-14 16:28:14

标签: sql sql-server sql-update sql-insert temp-tables

我有一个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表进行比较吗?或者有更有效的方法吗?

1 个答案:

答案 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语句中