2014-06-12 2 views
0

데이터를 실행하기 전에 사용하는 저장 프로 시저 내에 케이스가 있습니다.CASE 문이 내 저장 프로 시저 내에서 잘못된 결과를 제공합니다.

DECLARE @Setup nvarchar(50) 

SELECT 
    @ZipCode = CASE 
       WHEN REPLACE(@ZipCode, '0', '') = '' 
        THEN NULL ELSE @ZipCode 
       END, 
    @ZipCodeEND = CASE 
        WHEN REPLACE(@ZipCodeEND, '0', '') = '' 
        THEN NULL ELSE @ZipCodeEND 
       END, 

SELECT 
    @Setup = CASE WHEN (LEN(ISNULL(@ZipCode, ''))) > 0 THEN '1' ELSE '0' END + 
      CASE WHEN (LEN(ISNULL(@ZipCodeEND,''))) > 0 THEN '1' ELSE '0' END 

IF ISNULL(@ID, 0) = 0 
BEGIN 
    INSERT INTO dbo.MapToStaticValuesTable(ZipCode, ZipCodeEND, Setup) 
    VALUES(@ZipCode, @ZipCodeEND, @Setup) 
END 

문제는 여기에 우편 번호와 zipcodeEnd가 비어 내가 값 "11"대신 받고 "00"가 계속 테이블에 저장 한 후 null로 설정하더라도이다. 내가 nvarchar 값과 같은 예를한다면

는 이제 작동합니다,하지만 ZipCodeZipCodeEndint로 설정되어 있기 때문에 그것은 이상한 행동입니다.

답변

3

정수에서 문자열 함수를 사용하기 때문에 이상하게 작동합니다. 당신이 당신의 코드로 무엇을 성취하려고하는지 확신 할 수는 없지만, 단지 값을 정수로 검사함으로써 할 수 있다고 확신합니다.

나는 이것이 당신이 찾고있는 것 같아요. 이상한

select case when nullif(@ZipCode, 0) is null then '0' else '1' end + 
     case when nullif(@ZipCodeEND, 0) is null then '0' else '1' end 

한 예를

select isNull(@ZipCode, '') 

반환 0 경우 @ZipCodenull입니다.

+0

감사합니다. "설정"열의 목적은 유효성 검사에이 값을 사용하는 다른 프로그램이 있다는 것입니다. 나는 그것이 이상하다는 것을 알고있다 :-) – MishMish

관련 문제