我有两个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
答案 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)