2012-09-11 4 views
2

SQL Server에서 하나의 쿼리를 실행하고 "데이터 형식 varchar를 숫자로 변환하는 중 오류가 발생했습니다."아래 쿼리에서 데이터베이스에 쿼리하고있는 쿼리를 찾으십시오.SQL Server 2008에서 데이터 형식 varchar를 숫자로 변환하는 중 오류가 발생했습니다.

SELECT Limit = (Case isnull(PR009000.COVERAGE ,null) 
    When isnull('UM',null) then   
     (Case 
      When 'SPLIT' = 'CSL' then (select UMLimitTypeDes from CASeleUMLimitType where UMCoverageTypeCd =('SPLIT') 
       and UMLimitTypeCd=(Select top 1 USAMNT02 From PR006000 Where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA') 
       and StateCd= (select top 1 RATESTE from PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1)) 
      When 'SPLIT' = 'SL' then (select UMLimitTypeDes from CASeleUMLimitType where UMCoverageTypeCd=('SPLIT') 
       and UMLimitTypeCd=(Select top 1 USAMNT02 From PR006000 Where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
       and StateCd=(select top 1 RATESTE from PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1)) 
      When 'SPLIT' = 'BI' then (select UMLimitTypeDes from CASeleUMLimitType where UMCoverageTypeCd=('SPLIT') 
       and UMLimitTypeCd =cast((Select top 1 USAMNT03 From PR006000 Where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA') AS varchar(100)) 
       and StateCd =cast((select top 1 RATESTE from PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1) AS varchar(100))) 
      When 'SPLIT' = 'N' or 'SPLIT' = 'SPLIT' then (select top 1 isnull(UMLimitTypeDes,null) from CASeleUMLimitType where UMCoverageTypeCd=('SPLIT') 
       and UMLimitTypeCd=(Select top 1 isnull(USAMNT03,null) From PR006000 Where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0' and MCO = '05' and LOC= '00' and INSLINE = 'CA') 
       and StateCd=(select top 1 isnull(RATESTE,null) from PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1)) 
      When 'SPLIT' = 'PD' then (

       select isnull(UMLimitTypeDes,null) from CASeleUMLimitType where UMCoverageTypeCd=('SPLIT') 
       and UMLimitTypeCd=(Select top 1 isnull(USAMNT04,null) From PR006000 Where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
       and StateCd=(select top 1 isnull(RATESTE,null) from PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1)) 

     End) 
    When isnull('UN',null) then   
     (Case 
      When 'SPLIT' = 'CSL' then 
       (Select isnull(USAMNT02,null) From PR009000 Where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and coverage='UN') 
      When 'SPLIT' = 'BI' then 
       (Select isnull(USAMNT03,null) From PR009000 Where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and INSLINE = 'CA' and coverage='UN') 
      When 'SPLIT' = 'N' then 
       (Select isnull(USAMNT03,null) From PR009000 Where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and INSLINE = 'CA' and coverage='UN')  


     End) 

When 'DOC-MP' then 
    (Select USCDE14 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
When 'DOC-UM' then 
    (Select USIND06 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
When 'DOC-UN' then 
    (Select USIND05 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
When 'DOCUMP' then 
    (Select USAMNT04 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='DOCUMP') 
When 'DOCUNP' then 
    (Select USAMNT04 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='DOCUNP') 
When 'DTHBEN' then 
    (Select USAMNT03 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='DTHBEN') 
When 'HIRE' then 
    (Select USAMNT05 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
When 'HIREUM' then 
    (Select USIND09 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
When 'HIREUN' then 
    (Select USIND12 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
    When 'LIAB' then 
    (Select USAMNT05 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' ) 
    When 'MEDPAY' then 
    (Select USCDE02 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' )   
    When 'NONUM' then 
    (Select USCDE08 From PR006000 where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' )   
    When 'SOUND' then 
    (Select USAMNT03 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='SOUND')   
    When 'TRLCMP' then 
    (Select USAMNT03 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='TRLCMP')   
    When 'TRLCOL' then 
    (Select USAMNT03 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='TRLCOL')   
    When 'TRLSP' then 
    (Select USAMNT03 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='TRLSP')   
    When 'UMPD' then 
    (Select USAMNT01 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='UMPD')   
    When 'REG-UM' then 
    (Select USAMNT04 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='REG-UM')  
    When 'REG-UN' then 
    (Select USAMNT04 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='REG-UN')  
    When 'REG-L' then 
    (Select USAMNT04 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='REG-L')  
    When 'REG-MP' then 
    (Select USAMNT04 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='REG-MP')  
    When 'REG-PIP' then 
    (Select USAMNT04 From PR009000 where SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 and insline = 'CA' and coverage='REG-PIP')   

    Else 
    (Select '-1') 
    End) 
    FROM PR009000 WHERE SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 

여기서 PR009000은 이러한 데이터가있는 테이블입니다.

select * FROM PR009000 WHERE SYMBOL='CPP' AND POLNUM=0001148 AND MODULE=00 AND LOC=00 AND MCO=05 AND PCO=05 AND UNTRECNUM=1 

여기가

쿼리 문제이고 무엇이 이것에 대한 해결책이 있어야 할 곳에 알려 주시기 바랍니다

Select * From PR006000 Where Symbol= 'CPP' and POLNUM = '0001148' and MODULE = '0 ' and MCO = '05' and LOC= '00' and INSLINE = 'CA' 

에 사용되는 다른 테이블입니다.

+1

때때로 'POLNUM'을 숫자로 사용하고 때로는 varchar로 사용합니다. 아마도 숫자 0001148을 인용 해보아야합니다. 코드 부분에'POLNUM = 0001148'이 나와 있습니다. –

답변

5

테이블 정의를 알 수 없으므로 쿼리를 구문 분석하지 않습니다. 그러나 문제는 거의 확실 개념적으로, 당신은 같은 것을 가지고있다 :

CASE 
    WHEN Condition 1 THEN <decimal value> 
    WHEN Condition 2 THEN <string value> 
END 

문제를 CASE표현이 하나의 잘 정의 된 데이터 형식의 결과를 가지고 있어야한다는 것입니다. THEN 절은이 단일 유형의 값을 반환하거나 변환해야합니다.

형식이 혼합되어 있으면 SQL Server는 다양한 우선 순위 규칙을 사용하여 형식을 선택합니다. 이 경우 숫자 형식으로 선택되며 문자열을 숫자로 변환하지 못합니다.

일반적인 방법이 될 것입니다 해결하기 위해 :

CASE 
    WHEN Condition 1 THEN CONVERT(varchar(200),<decimal value>) 
    WHEN Condition 2 THEN <string value> 
END 

이제 SQL 서버는 문자열로 모든 것을 유지합니다.

+0

글쎄 ... :) – bot

관련 문제