복붙노트

[SQL] 어떻게 SQL에서 INSERT에 대한 중복 값을 피하기 위해?

SQL

어떻게 SQL에서 INSERT에 대한 중복 값을 피하기 위해?

나는 하나 개의 테이블 이름했다 :

Delegates

이 테이블은 네 개의 필드가 있습니다 :

ID(Auto increment, Primary)
MemberNo, FromYr, ToYr

나는이 쿼리를 삽입하고 있습니다 :

INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)

값은 사용자의 입력에서 비롯됩니다. 한 회원은 그들이 원하는대로 내가 입력을 허용 왜 어떤 년 대리자가 될 수 있습니다. 하지만 지금 문제는 그들이 2 회 이상 같은 해에 대한 실수 한 멤버 삽입 할 수 있습니다. 내가 지금 여기서 무엇을 할 수 있는지 제발 도와주세요?

해결법

  1. ==============================

    1.같은 값으로 기록이있는 경우 검사를 삽입하기 전에 :

    같은 값으로 기록이있는 경우 검사를 삽입하기 전에 :

    if not exists (select * from Delegates d where d.FromYr = @FromYr and d.MemNo = @MemNo)
        INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)
    
  2. ==============================

    2.사용 MERGE

    사용 MERGE

    MERGE INTO Delegates D
    USING (values(@MemNo, @FromYr,@ToYr)) X ([MemNo],[FromYr],[ToYr])
    ON (insert unique key join)
    WHEN NOT MATCHED BY TARGET THEN
    INSERT ([MemNo],[FromYr],[ToYr]))
    VALUES (X.[MemNo],X.[FromYr],X.[ToYr]);
    
  3. ==============================

    3.이 시도, (내가 확인하지 않은)

    이 시도, (내가 확인하지 않은)

    INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)
    where @MemNo not in 
    (
        SELECT MemNo FROM words WHERE FromYr = @FromYr
    )
    
  4. ==============================

    4.그때 삽입 중복 오류가 발생합니다, 그 열에 고유 인덱스를 추가합니다. 이 정상적으로 실패 할 필요가있는 경우 그런 다음 그것을 처리 오류 수

    그때 삽입 중복 오류가 발생합니다, 그 열에 고유 인덱스를 추가합니다. 이 정상적으로 실패 할 필요가있는 경우 그런 다음 그것을 처리 오류 수

  5. ==============================

    5.값이 이미 DB에 포함되는지 여부를 먼저에 대한 검사를하게됩니다 저장 프로 시저를합니다. 그들이이 arent 경우 당신은 당신의 삽입을 할 것입니다. 그들은 단순히 그것을 무시하면

    값이 이미 DB에 포함되는지 여부를 먼저에 대한 검사를하게됩니다 저장 프로 시저를합니다. 그들이이 arent 경우 당신은 당신의 삽입을 할 것입니다. 그들은 단순히 그것을 무시하면

  6. ==============================

    6.이 간단하고, 한 줄의 코드로 중복을 삽입 방지 할 수 있습니다 :

    이 간단하고, 한 줄의 코드로 중복을 삽입 방지 할 수 있습니다 :

    INSERT INTO 대리인 (메모하여,부터) SELECT @MemNo가 @FromYr, @ToYr WHERE NOT EXISTS (대리자에서 D 1을 선택 WHERE d.MemNo=@MemNo AND d.FromYr=@FromYr)

    그것은이 명령이 실행되는 동안 다른 명령은 중복을 삽입 할 수 고부하 환경의 경우, WITH (HOLDLOCK) 힌트를 사용할 수 있습니다.

  7. from https://stackoverflow.com/questions/17442901/how-to-avoid-duplicate-values-for-insert-in-sql by cc-by-sa and MIT license