2013-05-02 3 views
0

이미 존재하는 레코드를 저장하려고하면 SQL에서 오류가 발생하지 않도록하는 방법이 있습니까? 두 값만있는 다 대다 관계에 대한 복합 키 테이블이 있습니다. 응용 프로그램에서 모델을 업데이트하면 모든 레코드를 저장하려고 시도합니다. 이미 존재하는 레코드는 오류를 던집니다. Cannot insert duplicate key입니다. 데이터베이스에서이를 무시하는 방법 또는 응용 프로그램에서 처리해야합니까?SQL 서버, 복합 키 - 중복 무시

답변

1

INSERT을 호출하고 중복 된 키를 추가하려고합니다. 이 오류는 의도적으로 설계된 것이며 필수적입니다. DB가 예외적이고 잘못된 조건에 대한 예외를 던지고 있습니다.

"업서 트"를 수행하려는 경우 저장 프로 시저를 사용하거나 MERGE 구문을 사용해야 할 수 있습니다.

만약, 대신, 당신은 UPDATE 싶지 않지만 그냥 테이블에 이미 행을 무시하려면, 당신은 ... 단순히 INSERT 문에 예외를 추가하는 등

.... 
WHERE 
    table.Key <> interting.key 
1

시도 필요 귀하의 삽입 진술과 함께 이런 식으로.

insert into foo (x,y) 
select @x,@y 
except 
select x,y from foo 

이렇게하면 테이블에없는 경우에만 foo에 레코드가 추가됩니다.

1

IGNORE_DUP_KEY 옵션을 사용하여 색인을 만들면 실제 오류가 아닌 중복 키가있는 경우에만 경고 메시지가 표시됩니다.

다른 옵션과 더 좋은 방법은 삽입이 아닌 MERGE 문을 사용하는 것입니다. MERGE 문은 Insert, Update 및 Delete를 모두 하나의 명령문으로 처리하고 사용자가하려는 작업에 잘 작동해야하는 것처럼 들립니다.

마지막으로 앱에서 수정하고 추가해야 할 행만 삽입 했으므로 중요하지 않습니다.