2014-02-28 2 views
0

일부 경우 12 자리로 채워져 있고 다른 경우에는 그렇지 않은 MAC 주소 목록이있는 테이블이 있습니다.MSSQL에서 업데이트하기 전에 고유 한 값이 존재하는지 확인하십시오.

예 : 00FF12345678 또는 FF12345678

는 두 값이 테이블에 존재하는 경우가 있습니다. 두 개의 0으로 값을 채우는 함수가 있는데이 중복의 발생을 계산할 수 있지만 수동으로 중복을 제거하거나 이미 레코드가없는 패드를 제거 할 시간이나 인내가 없습니다. 난 단지 기존이없는 그 값을 업데이트해야하기 때문에 물론

UPDATE [rs_DEVICES] 
SET [device] = dbo.pad_zero(12,[device]) 
WHERE LEN([device]) < 12 

이 작동하지 않습니다

나는 나는 다음과 같은 문으로 올바른 값으로 10 개 자리의 값을 업데이트 할 수 생각 12 자리 레코드. 이 열의 고유 한 제한 조건으로 인해이 작업이 중단됩니다.

IF EXISTS 문을 WHERE 절에 사용해야하지만 작동하는 것은 없습니다.

MSSQL Server 2008 R2를 사용하십시오.

생각하십니까?

+0

열에 고유 색인을 추가하십시오. –

답변

2

이 당신을 위해 작업을 수행합니다

UPDATE [rs_DEVICES] 
SET [device] = dbo.pad_zero(12,[device]) 
WHERE LEN([device]) < 12 AND NOT EXISTS (
    SELECT 1 FROM rs_DEVICES r1 WHERE r1.device = dbo.pad_zero(12,[device]) 
) 

나는 그것이 자기 설명 생각,하지만 당신은 질문이있는 경우 의견을주십시오.

솔직히, 나는 진짜 문제를 해결하는 것이 좋습니다. length=10 레코드의 현재 참조를 각각의 length=12 형제에게 재 할당 한 다음 제거하십시오.

+0

이 필드의 고유 제한 조건으로 인해 10 문자 값을 12 자로 업데이트하지 못하게되어 복제본이 작성되므로 동의합니다. 중복되지 않은 레코드가 12 자로 변환되면 이제 10 자리 숫자를 쉽게 제거 할 수 있습니다. –

+0

그게 무슨 뜻입니까. 먼저 모든 FK를 올바른 레코드로 재 할당 한 다음 '길이 = 10'레코드를 제거하십시오. 이 경우 업데이트 할 필요가 없습니다. – everton

관련 문제