こんにちは、良い一日。 2つのテーブルtable2
とtable1
で次のシーケンスを実行しようとしています。SQL - NULL列のためにUPDATEの代わりにINSERTを試みるとマージする
MERGE INTO table2 WITH (HOLDLOCK) AS target
USING
(
SELECT column1,
MAX(AccessDate) AS AccessDate,
SUM(AccessCount) AS AccessCount,
column4,
column5,
column6,
column7,
column8
FROM table1
GROUP BY column1, column4, column5, column6, column7, column8
) AS source
ON target.column1 = source.column1 AND
target.column5 = source.column5 AND
target.column6 = source.column6 AND
target.column7 = source.column7 AND
target.column8 = source.column8
WHEN MATCHED THEN
UPDATE SET target.LastAccessDate = source.AccessDate,
target.LastWeeklyAccessCount = source.AccessCount
WHEN NOT MATCHED BY TARGET THEN
INSERT (column1, LastAccessDate, LastWeeklyAccessCount, column4, column5, column6, column7, column8)
VALUES (source.column1, source.AccessDate, source.AccessCount, source.column4, source.column5, source.column6, source.column7, source.column8);
既存の日付はtable1
です。これは実行する必要があります。 私は、JOIN条件でtable1
に別のレコードを挿入する2つのテーブルを比較するとき、それが原因でNULL <> NULLのUPDATEの代わりに挿入しようと、会って、これは私が持っているUNIQUE制約を起動した場合:
オブジェクト 'dbo.table2'に重複キーを挿入できません。
誰でもこの問題を解決できますか?
正確にはどのフィールドに「NULL」を設定できますか? – gotqn
'column5'、' column6'、 'column8' –
' null'と 'null'をマッチさせると正しく動作しますか?((target.column5 = source.column5)OR(target.column5 IS NULLとsource.column5 IS NULL))AND'です。他の列についても同様です... – user1429080