2012-02-27 24 views
0

這是我的情況,我有一個名爲StatusesstatusID, statusName)的表,有22個狀態,還有其他表有statusID列。如何更新整列?

現在客戶想要將Statuses表中的所有22個狀態合併爲13個狀態。然後,我們必須更新,確切地說,映射所有其他表中的所有statusID

任何人都可以幫助我嗎?

+0

所以你正在尋找做一個級聯更新? – Taryn 2012-02-27 16:32:42

+0

您使用的是什麼RDBMS? – Lamak 2012-02-27 16:34:34

+0

sql server 2008.我認爲只是爲此編寫一個腳本? – GLP 2012-02-27 16:44:53

回答

5

因爲這聽起來像是一次性的事情,所以最簡單的方法就是對地圖進行硬編碼。

例如

UPDATE 
    TABLE 
SET StatusID = CASE WHEN StatusID = 1 THEN 5 
        WHEN StatusID = 2 THEN 5 
        WHEN StatusID = 3 THEN 1 
        WHEN StatusID = 4 THEN 5 
        WHEN StatusID = 5 THEN 2 
        ...17 more times 
       END 

,或者如果你已經有了一個映射表

UPDATE 
    TABLE 
SET StatusID = map.NewStatusID 
FROM 
     TABLE as T 
     INNER JOIN Map 
     ON t.StatusID = map.OldStatusID 
+0

謝謝。是否有可能使用selectId查詢statusId?我有一個映射表StatusesMapping(OldStatusID,NewStatusID)。 – GLP 2012-02-27 16:59:22

+1

當然,我已經更新了我的示例,以包含映射表 – 2012-02-27 17:04:37

+0

謝謝。這正是我想要的。如果客戶想要稍後更改表格,我只需要更改映射表,而不是腳本。 – GLP 2012-02-27 17:07:38