2012-10-10 59 views
0

我有一個11000行的表(兩列是URN和日期),我想添加行到它。 但是,如果添加新行時URN已經存在,則它應該覆蓋前一條記錄,以便更新日期。 例如,更新行如果日期更近

select urn, GETDATE() AS Date 
into table1 
from table2 

如果骨灰盒10253有日期23/05/2005表1中,但金塔是在表2那麼它應該是與甕10253日期內容替換2012年10月10日

+3

您可能會感興趣的[MERGE](http://technet.microsoft.com/en-us/library/bb510625.aspx)語句。 –

+0

@MichalKlouda:**如果他使用的是SQL Server ** 2008或更新的版本...... MERGE在2000或2005年不可用...... –

+0

這是正確的,這就是爲什麼他*可能會感興趣; ) –

回答

1

--update所有第一

Update t1 SET date=t2.date 
from table1 t1 inner join table2 t2 
on t1.urn=t2.urn 

--insert所有新記錄的匹配記錄

INSERT INTO table1 
select * from table2 t1 where NOT EXISTS(select * from table1 t1 where t1.urn=t2.urn) 
+0

我知道查詢優化器足夠聰明,可以抓住這個,而不是'WHERE t2.urn NOT IN(SELECT t1.urn FROM table1 t1)'use'WHERE NOT EXISTS(SELECT * FROM table1 t1 WHERE t1.urn = t2.urn)' – deroby

+0

是的,那是真的,因爲Exists比IN.I錯過了,我錯過了 – AnandPhadke

+0

更新了查詢。請檢查 – AnandPhadke

2

下面是使用語法合併,將在2008年SQLSERVER工作:

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;