2012-10-15 4 views
0

지금까지 문제를 디버깅하려고 애 쓰고 있었지만 지금은 문제가 무엇인지 알았습니다. 카탈로그에 고유 한 값만 강제 적용하는 테이블에 고유 한 제한 조건이 있습니다. 그러나 나는이 경우 고유 한 것이 무엇인지에 대해 잘 이해하지 못하는 것 같습니다. 두 개의 제품 번호가 있습니다 MP1156MP1156ZF입니다.SQL 이해 테이블 ​​고유 제한

Msg 2627, Level 14, State 1, Line 5
Violation of UNIQUE KEY constraint 'UK_CNUMUNIQUE'. Cannot insert duplicate key in object 'dbo.IDWProductCodes'. The duplicate key value is (MP115).

일어나고있다 내가 다음 첫 번째 키를 삽입 할 때마다이 두 번째 키를 삽입하려고이다가, SQL들이 동일하다고 가정 및 제 덮어 쓰기 :

Insert into IDWProductCodes(PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID) 
    Select 
     '11232', '23223', 'MP115BP', 1, 0, 0, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C' 

Insert into IDWProductCodes(PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID) 
    Select 
     '11232', '23223', 'MP115', 1, 0, 1, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C' 

Insert into IDWProductCodes(PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID) 
    Select 
     '11232', '23223', 'MP15', 1, 1, 1, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C' 

는 오류가 발생합니다 둘째로, 나는 전혀 원하지 않는 효과입니다.

정말로 원하는 것은 테이블에 다른 문자열 (중복 없음)을 입력 할 수있는 기능입니다. 나는 유일한 제약이 그것이 취할 것 인 모든 것이었다라고 생각했다. 그러나 지금 나는 확실하지 않다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

제품 번호 열의 너비와 유형은 무엇입니까? 또한, 당신이 이야기하고있는 고유 한 제약 조건을 스크립트로 작성하여 질문에 포함시킬 수 있습니까? – JohnFx

+0

스키마를 보여 주면 도움이 될 것입니다. 'MP1156'및 'MP11156ZF'문자열은 동일한 것으로 조합되지 않습니다. SQL은 길이가 더 긴 문자를 공백으로 채우고 왼쪽에서 오른쪽으로 작업하면서 차례대로 각 문자를 비교하여 문자열을 효과적으로 비교합니다. 첫 번째 차이가 결과를 결정합니다. –

+0

그냥 NVarchar (48). – Kobojunkie

답변

0

나는 당신이 무슨 일이 일어나고 있는지 오해하고 있다고 생각합니다. SQL 고유 제한 조건은 복제본을 삽입하려고 시도 할 때 기존 행을 겹쳐 쓰게하지는 않습니다. 제약 조건을 위반하는 두 번째 삽입이 실패합니다.

삽입물 및 테이블 구조에 사용중인 코드를 보여주십시오. 내가 본 후에 진짜 문제를 해결하기 위해이 대답을 수정 하겠지만, 당신이 제공 한 정보에서 유일한 제약은 문제가 아닙니다.

또한 해당 테이블에 트리거가 없는지 확인하십시오. 그것이 내가 생각할 수있는 유일한 것입니다. 기존 행을 대체하는 삽입과 같은 어지러운 행동을 만들 것입니다.

+0

그러나 이전 삽입을 덮어 쓰는 이유를 찾는 동안 고유 제한 조건이 덮어 쓰기를해서는 안됩니다. 나는 문제의 근본 원인이라고 생각하는 값을 사용하여 테이블에 직접 삽입하기로 결정했다. 위의 오류로 인해 제약 조건이 만족스럽지 않다는 것을 알게되었다. – Kobojunkie

+0

MP115BP 및 MP115와 같은 문자열이 내 제약 조건에서 동일하게 간주되지 않도록하려면 어떻게해야합니까? – Kobojunkie

+0

아니요, 테이블에 트리거가 없습니다. 방금 제약 조건을 떨어 뜨린 삽입 잘 실행 한 다음 제약 조건을 다시 넣으려면 시도하고 유사한 오류 메시지가 --- 개체 이름 'dbo.IDWProductCodes'에 대한 중복 키를 찾을 수 있기 때문에 CREATE UNIQUE INDEX 문이 종료되었습니다. 색인 이름 'UK_UniqueCatalogNum'. 중복 키 값은 (MP115)입니다. – Kobojunkie

0

다른 작업이 진행 중입니다. SQL Server는 'MP115'와 'MP115BP'두 문자열을 같은 값으로 혼동하지 않습니다. 테이블 구조를 스크립트로 볼 수 있도록 여러 번 묻습니다. SSMS를 사용하여 테이블을 마우스 오른쪽 단추로 클릭하고 스크립트 테이블 As> CREATE to> Clipboard을 클릭합니다. 결과를 게시하면 더 많은 것을 도울 수 있습니다.

그러나 여기에는 근사한 추측이 있습니다. 테이블에 PRCatalogNumber를 5 자로 자르고 자체 UNIQUE INDEX가 다른 컴퓨터 열을 가질 수 있습니까? 그것은 당신이보고있는 문제를 일으킬 것입니다.

관련 문제