2012-11-07 49 views
1

我正在執行MERGE語句從臨時表t到主表ts,在ID字段匹配。它包含以下內容:合併聲明:不更新空白字段

WHEN MATCHED THEN UPDATE 
    SET ts.username = t.username, ts.password = t.password, ts.title = t.title, ts.firstname = t.firstname, ts.surname = t.surname, ts.email = t.email 

如果用戶名和密碼是在臨時表t空白,我不想要更新的主表ts。我怎樣才能做到這一點?

編輯:看起來像一個CASE聲明或使用COALESCE(NULLIF(t.username, ''), ts.username)將工作。哪個最好?

+0

你可以做一個虛擬更新嗎?即設置ts.username = coalesce(t.username,ts.username),... –

+0

@Frank Schmitt我從來不知道COALESCE函數。如果我用NULLIF來使用它,我認爲它會做到這一點! – Marcus

+0

實際問題是什麼:您是否希望從更新中刪除記錄,因爲它會始終更新,即使您將其設置爲之前的值。 – Farfarak

回答

1

當用空格處理(即空字符串),然後使用一個case語句

WHEN MATCHED THEN UPDATE 
    SET case when t.username = '' then ts.username else t.username end 

如果你處理的空,然後使用ISNULL

​​

如果它可以是空白或空,你可以在案件陳述中處理兩者

WHEN MATCHED THEN UPDATE 
    SET case when t.username = '' or t.username is null then ts.username else t.username end 
+0

感謝克里斯,這工作,但我決定使用'ISNULL(NULLIF(t.username,''),ts.username)',而不是因爲它比寫案例陳述。 – Marcus