我有一個11000行的表(兩列是URN和日期),我想添加行到它。 但是,如果添加新行時URN已經存在,則它應該覆蓋前一條記錄,以便更新日期。 例如,更新行如果日期更近
select urn, GETDATE() AS Date
into table1
from table2
如果骨灰盒10253有日期23/05/2005表1中,但金塔是在表2那麼它應該是與甕10253日期內容替換2012年10月10日
我有一個11000行的表(兩列是URN和日期),我想添加行到它。 但是,如果添加新行時URN已經存在,則它應該覆蓋前一條記錄,以便更新日期。 例如,更新行如果日期更近
select urn, GETDATE() AS Date
into table1
from table2
如果骨灰盒10253有日期23/05/2005表1中,但金塔是在表2那麼它應該是與甕10253日期內容替換2012年10月10日
--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)
我知道查詢優化器足夠聰明,可以抓住這個,而不是'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
是的,那是真的,因爲Exists比IN.I錯過了,我錯過了 – AnandPhadke
更新了查詢。請檢查 – AnandPhadke
下面是使用語法合併,將在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;
您可能會感興趣的[MERGE](http://technet.microsoft.com/en-us/library/bb510625.aspx)語句。 –
@MichalKlouda:**如果他使用的是SQL Server ** 2008或更新的版本...... MERGE在2000或2005年不可用...... –
這是正確的,這就是爲什麼他*可能會感興趣; ) –