에 중복 행을 무시 :건너 뛰기 오버/인서트
DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 2 12321
2012-05-21 3 32
tmp_holding_DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 4 87
2012-05-21 5 234
DateStamp
및 ItemId
기본 키 열입니다.
insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
이 유지 테이블 (tmp_holding_DataValue
)에서 데이터를 이동하는 주요 데이터 테이블 (DataValue
)에 걸쳐 :
나는 (저장 프로 시저에) 하루 동안 주기적으로 실행되는 삽입을하고 있어요. 그러면 홀딩 테이블이 잘립니다.
예에서와 같이 보유 테이블에 이미 주 테이블에있는 항목이 포함될 수 있습니다. 키가 중복 값을 허용하지 않으므로 프로 시저가 실패합니다.
하나의 옵션은 삽입 프로 시저에 where 절을 넣는 것이지만 기본 데이터 테이블에는 1000 만 개의 행이 있으며 이는 오랜 시간이 걸릴 수 있습니다.
삽입을 시도 할 때 중복을 건너 뛰거나 무시하는 다른 방법이 있습니까? SQL Server 2008+
에서
보유 테이블의 '값'열이 다른 경우 (예 : 첫 번째 행의 경우 '6541'대신 '3253'입니까? 아직도 중복 된 것입니까? 그렇지 않다면 소스 테이블에서 '6541 + 3253'을 추가하거나 업데이트 하시겠습니까? –
값 열은 중요하지 않습니다. 다른 값이 무시되면 해당 날짜 스탬프에 대해 이미 DataValue에있는 값을 그대로 두어야합니다. – finoutlook
SQL Server의 최소 * 버전 *에 질문을 태그하는 것이 매우 유용합니다. 지원해야합니다.처음에는 당신이 어떤 버전을 사용하고 있는지 전혀 몰랐기 때문에 나는'MERGE' 솔루션을 제공하지 않았습니다. –