[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.같은 값으로 기록이있는 경우 검사를 삽입하기 전에 :
같은 값으로 기록이있는 경우 검사를 삽입하기 전에 :
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.사용 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.이 시도, (내가 확인하지 않은)
이 시도, (내가 확인하지 않은)
INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr) where @MemNo not in ( SELECT MemNo FROM words WHERE FromYr = @FromYr )
-
==============================
4.그때 삽입 중복 오류가 발생합니다, 그 열에 고유 인덱스를 추가합니다. 이 정상적으로 실패 할 필요가있는 경우 그런 다음 그것을 처리 오류 수
그때 삽입 중복 오류가 발생합니다, 그 열에 고유 인덱스를 추가합니다. 이 정상적으로 실패 할 필요가있는 경우 그런 다음 그것을 처리 오류 수
-
==============================
5.값이 이미 DB에 포함되는지 여부를 먼저에 대한 검사를하게됩니다 저장 프로 시저를합니다. 그들이이 arent 경우 당신은 당신의 삽입을 할 것입니다. 그들은 단순히 그것을 무시하면
값이 이미 DB에 포함되는지 여부를 먼저에 대한 검사를하게됩니다 저장 프로 시저를합니다. 그들이이 arent 경우 당신은 당신의 삽입을 할 것입니다. 그들은 단순히 그것을 무시하면
-
==============================
6.이 간단하고, 한 줄의 코드로 중복을 삽입 방지 할 수 있습니다 :
이 간단하고, 한 줄의 코드로 중복을 삽입 방지 할 수 있습니다 :
INSERT INTO 대리인 (메모하여,부터) SELECT @MemNo가 @FromYr, @ToYr WHERE NOT EXISTS (대리자에서 D 1을 선택 WHERE d.MemNo=@MemNo AND d.FromYr=@FromYr)
그것은이 명령이 실행되는 동안 다른 명령은 중복을 삽입 할 수 고부하 환경의 경우, WITH (HOLDLOCK) 힌트를 사용할 수 있습니다.
from https://stackoverflow.com/questions/17442901/how-to-avoid-duplicate-values-for-insert-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 그룹 당 하나 개의 칼럼의 최대 값을 반환 행 [중복] (0) | 2020.04.16 |
---|---|
[SQL] SELECT 절에서 여러 설정을 돌려주는 기능을위한 예상되는 동작은 무엇인가? (0) | 2020.04.16 |
[SQL] 단지 MySQL의 쿼리를 사용하여 중복 제거? (0) | 2020.04.16 |
[SQL] 테이블 사용 ROWNUM의 두 번째 행을 선택 (0) | 2020.04.16 |
[SQL] 포스트 그레스 대소 문자 구분 (0) | 2020.04.16 |