2013-08-21 32 views
0

我有兩個舊錶,並想「同步」(或更好設置新)兩個新表...這樣的:MSSQL - 舊到新表中,而不dublicates

tbl_old_event_categories(ID,標題)
tbl_old_events(ID,標題,CAT_ID)

tbl_new_event_categories(ID,類別)
tbl_new_events(event_id的,事件,CATEGORY_ID)

的PROBL em是新表可能已經有了值。所以ID會改變(也許)。因爲我不能使用ON DUPLICATE KEY UPDATE。 :(我需要檢查它單獨爲每個記錄的表是不是唯一的(我無法更改):/

我創建了一個JOIN獲得:
tbl_old_fullevents(事件類別) //沒有的ID(整數)只有名字(字符串)

但如何創建一個INSERT INTO [tbl_new_events]與檢查現有[事件] - 和[類別 - 值這是這樣的:

 
    IF(tbl_old_fullevents.event IS NOT IN(tbl_new_events.events)) { 
    INSERT INTO new_events VALUE(
     NULL, //ID 
     tbl_old_fullevents.event, 
     IF(tbl_old_fullevents.category IN(new_event_categories.categories)) { 
     new_event_categories.id //matched 
     } 
     ELSE { 
     INSERT INTO new_event_categories VALUE (
     NULL, //ID 
     old_fullevents.category 
     ); 
     new_event_categories.id //last INSERT-ID 
     } 
    ); 
    } 
+0

新表是獨一無二的嗎?如果沒有,你是塞滿了。 –

回答

1

使用MERGE語法。示例請參見http://technet.microsoft.com/en-us/library/bb510625.aspx

您不能使用ON DUPLICATE KEY UPDATE,因爲這是mysql。

+0

[關於爲什麼你可能不應該使用'MERGE']的一些想法(http://dba.stackexchange.com/questions/44067/can-i-optimize-this-merge-statement/44069#44069)。 :-) –

+0

不,我不能,值字段不是關鍵字段。 :/ – Froschkoenig84