T-SQL Merge語法主要是由SQL Server 2008所推出的新語法,可以判斷資料是否存在,動態選擇Insert或Update語法進行處理,進而同步二個表格之間的資料,而目前大部份的範例都是說明如何同步二個表格,但是根據我的需求,好像都行不通,後來終於讓我試出來了,而且原本二個程序的語法變成一個程序,實測下感覺速度快了很多,所以在此提供。
原本的語法,先查詢此基金的編號與日期是否存在,如果存在則更新基金的淨值,不存在的話就新增基金當天的淨值資料。
select 1 from fund_value
where fund_sn = 2062 and gdate_111 = '2008/12/30'
新增語法:
insert into fund_value(fund_sn, gdate, nvalue)
values(2062, '2008/12/30',5.7602);
更新語法:
update fund_value
set nvalue = 5.701
where fund_sn = 2062 and gdate_111 = '2008/12/30'
利用SQL Server 2008 提供的Merge語法來將上面的三段語法進行整合,最後只要透過下列的語法即可完成:
MERGE INTO fund_value as t_fv --Target
USING (select 2062 fund_sn, '2008/12/30' gdate_111) s_fv --Source
ON t_fv.fund_sn = s_fv.fund_sn and t_fv.gdate_111 = s_fv.gdate_111
WHEN MATCHED THEN
update set t_fv.nvalue = 5.76003
WHEN NOT MATCHED THEN
insert(fund_sn, gdate, nvalue) values(2062, '2008/12/30',5.7602);
謝謝分享!!
回覆刪除