MERGE DestinationTable AS D
USING SourceTable AS S
ON D.Alternate_ID = S.ID
WHEN MATCHED AND
(
D.ID <> S.ID
OR D.col1 <> S.col1
OR D.col2 <> S.col2
OR D.col3 <> S.col3
OR D.col4 <> S.col4
OR D.col5 <> S.col5
OR D.col6 <> S.col6
OR D.col7 <> S.col7
OR D.col8 <> S.col8
)
大家好,我試圖更新DestinationTable,如果SourceTable中的任何列值已經使用上面的合併語句片段更改。但是,如果我在目標列中有一個NULL值並且源中有字符串或位值,則比較D.col8 <> S.col8
將返回false,因爲SQL處理與NULL值的比較方式。因此,DestinationTable不會使用SourceTable中的新值更新。在SQL Server中比較NULL與字符串
解決此問題的更好方法是什麼?如果D.Col8是NULL並且S.Col8有一個字符串或位值,我仍然想要爲表達式返回true,如D.col8 <> S.col8
因此,如果我在S.Col8中具有「Test」的值並且NULL D.Col8,我想更新從空目標列 「測試」
執行更新時,沒有列*實際*更改了您需要消除的可測量成本? – 2014-09-29 07:15:48
d.col8不爲空,d.col8 <> s.col8 – DwB 2014-09-29 07:16:04
@Damien_The_Unbeliever,是的,這是可取的。 – StackTrace 2014-09-29 07:19:23