안녕하세요. 좋은 하루 되세요. 두 테이블 table2
및 table1
에서 다음 시퀀스를 실행하려고합니다.NULL - 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
인 경우 수행해야 할 작업이 있습니다. 나는 조건이 충족 가입와 table1
다른 레코드를 삽입하는 경우 , 그것은 두 테이블을 비교했을 때 대신 UPDATE의 때문에 NULL <> NULL의 INSERT하려고이 때문에 내가 가지고있는 UNIQUE 제약 조건의 등장 :
'dbo.table2'객체에 중복 키를 삽입 할 수 없습니다.
누구든지이 문제를 해결할 수 있습니까?
정확히 어떤 필드가 NULL 일 수 있습니까? – gotqn
'column5','column6','column8' –
'null'을'null'과 일치 시키면 올바르게 작동할까요? ((target.column5 = source.column5) OR (target.column5는 NULL이고 source.column5는 NULL입니다. IS NULL)) AND'입니다. 마찬가지로 null 일 수있는 다른 열에 대해서 ... – user1429080