使用If / Else语句将新记录插入表中

时间:2019-03-27 22:58:52

标签: sql sql-server if-statement sql-insert

我有两个SQL Server表,我需要在其中将记录从一个表添加到另一个表。如果目标表中已经存在唯一标识符,则将记录更新为源表中的数据-如果唯一标识符不存在,则将整个新记录插入目标表中。

我似乎已经在更新目标表中的记录的地方开始工作了,但是我插入新记录的部分似乎没有工作。

if exists (
   select 1
   from SCM_Top_Up_Operational O
   join SCM_Top_Up_Rolling R ON O.String = R.string
)
begin

   update O
   set    O.Date_Added = R.Date_Added,
          O.Real_Exfact = R.Real_Exfact,
          O.Excess_Top_Up = R.Excess_Top_Up 
   from  SCM_Top_Up_Operational O 
   join  SCM_Top_Up_Rolling R on O.String = R.String
   where O.String = R.string and R.date_added > O.date_added

end

else 

begin
   insert into SCM_Top_Up_Operational (String,Date_Added,Real_Exfact,Article_ID,Excess_Top_Up,Plant)
   select String,Date_Added,Real_Exfact,Article_ID,Excess_Top_Up,Plant
   from SCM_Top_Up_Rolling
end

1 个答案:

答案 0 :(得分:2)

如果我正确地遵循了您的要求,则应该可以使用SQL Server MERGE syntax进行一次SQL查询来解决此问题,该查询自SQL Server 2008开始可用。

从文档中:

  

根据与源表的联接结果在目标表上运行插入,更新或删除操作。例如,通过根据另一个表中的差异在一个表中插入,更新或删除行来同步两个表。

考虑以下查询:

MERGE 
    SCM_Top_Up_Operational O 
    USING SCM_Top_Up_Rolling R ON (O.String = R.string)
WHEN MATCHED 
    THEN UPDATE SET 
        O.Date_Added    = R.Date_Added,
        O.Real_Exfact   = R.Real_Exfact,
        O.Excess_Top_Up = R.Excess_Top_Up 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (  String,   Date_Added,   Real_Exfact,   Article_ID,   Excess_Top_Up,   Plant)
         VALUES (R.String, R.Date_Added, R.Real_Exfact, R.Article_ID, R.Excess_Top_Up, R.Plant)