2012-03-14 45 views
4

我有一個具有空字段的登臺表(在SQL SERVER 2008中)。
我想插入或更新從臨時表到主表的記錄。
在此我想的比較做在插入和更新語句中使用if/else

Update main 
set main.field1 = (
if(staging.field1 isnull) 
    then ---- 
else if(staging.field2 isnull) 
    then ---- 
else 
    then 
) 

如何能夠將我的INSERT和UPDATE語句上述條件?

回答

10

的(在某種程度上)相當於是用CASE表達式:

UPDATE main 
SET main.field1 = 
    CASE 
    WHEN staging.field1 IS NULL 
     THEN -- 
    WHEN staging.field2 IS NULL 
     THEN -- 
    ELSE -- 
    END; 
+0

對不起,我忘了提..條件必須是優先的基礎上。 – Kamil 2012-03-14 16:54:47

+0

*優先*按照您列出的順序排列。所以在這個例子中,優先級將被賦予「field1」表達式,後面跟着「field2」。第一個限定表達式是其值被賦給'main.field1'的那個表達式。 – Yuck 2012-03-14 16:56:27

0
MERGE INTO main 
    USING staging 
     ON main.id = staging.id 
WHEN MATCHED THEN 
    UPDATE 
     SET field1 = COALESCE(staging.field1 , main.field1), 
     SET field2 = COALESCE(staging.field2 , main.field2), 
     ... ;