我有一个包含 11000 行的表(两列是 URN 和日期),我想向其中添加行。但是,如果在添加新行时 URN 已经存在,它应该覆盖以前的记录,以便更新日期。例如,
select urn, GETDATE() AS Date
into table1
from table2
如果 urn 10253 在 table1 中有日期 23/05/2005 但 urn 在 table2 那么它应该被替换为 urn 10253 日期 10/10/2012
我有一个包含 11000 行的表(两列是 URN 和日期),我想向其中添加行。但是,如果在添加新行时 URN 已经存在,它应该覆盖以前的记录,以便更新日期。例如,
select urn, GETDATE() AS Date
into table1
from table2
如果 urn 10253 在 table1 中有日期 23/05/2005 但 urn 在 table2 那么它应该被替换为 urn 10253 日期 10/10/2012
以下是使用合并的语法,适用于 sqlserver 2008:
merge into table1 t1
using table2 t2 on t1.urn = t2.urn
when not matched then
insert (urn,date)values(t2.urn,t2.date)
when matched then
update
set t1.date = t2.date;
--先更新所有匹配的记录
Update t1 SET date=t2.date
from table1 t1 inner join table2 t2
on t1.urn=t2.urn
--插入所有新记录
INSERT INTO table1
select * from table2 t1 where NOT EXISTS(select * from table1 t1 where t1.urn=t2.urn)