2012-10-29 8 views
0

QA 환경뿐만 아니라 내 로컬 환경에서 올바르게 작동하는 저장 프로 시저가 있습니다.
메시지 번호 = "8115"심각도 = "16"상태 = "8nvarchar를 데이터 형식 숫자로 변환하는 산술 오버플로 오류

그러나 클라이언트에서 UAT 환경에서 그 오류

System.Data.SqlClient.SqlException에게 준다 "> 산술 오버플로 오류 nvarchar를 데이터 유형 numeric으로 변환합니다.

또한 클라이언트 위치에 설치된 로컬 인스턴스 중 하나에서 정상적으로 작동합니다. 난 코드 라인을 umcommenting/주석에 의한 오류를 범 코드 라인을 발견하고 변수 @TotalHHInternalTo가 기억에 전달 된 탐색 기준의 일부 타입의 소수의 파라미터 다운

(
     @TotalHHInternalTo IS NULL 
     OR 
     (
      IsNumeric(E.[Xml].value(
            'declare default element namespace "http://www.xyz/1.0"; 
            (/Event/Data/CustomData/DataXML/ProductData/ProductParty/ProductCategory[@code != ''Protection'']/Product/FundValue)[1]', 
            'nvarchar(50)' 
            )) = 1 
      AND 
      EXISTS 
      (
       SELECT 
        1 
       FROM E.[Xml].nodes(
        'declare default element namespace "http://www.xyz/1.0"; 
        /Event/Data/CustomData/DataXML/ProductData/ProductParty/ProductCategory[@code != ''Protection'']/Product') as P(E) 
       HAVING SUM(P.E.value(
             'declare default element namespace "http://www.xyz/1.0"; 
             (FundValue)[1]', 
             'decimal' 
             )) <= @TotalHHInternalTo 
      ) 
     ) 
    ) 

행을 제로 프로 시저를 XML로 저장합니다. 제품 파티에서 4 가지 제품 카테고리가 있으며 보호 유형을 제외한 모든 기금 가치를 합산해야합니다. 이 3 가지 유형의 합이 @TotalHHInternalTo 미만인 경우 검색 결과에 표시하고 싶습니다.

isNumeric 조건을 추가하여 xml에서 가져온 값이 숫자 값인지 확인했습니다.

그러나 여전히 오버플로 오류가 발생합니다.

답변

1

내 대괄호를 확인하십시오. 그러나 CASE를 사용하여 명시 적 단락 부울 평가로 변환해야합니다. SQL Server는 임의의 순서로 AND 조건을 평가할 수 있으며 스틱의 끝이 잘못되었습니다.

 CASE WHEN IsNumeric(E.[Xml].value(
           'declare default element namespace "http://www.focus-solutions.co.uk/focus360/1.0"; 
           (/Event/Data/CustomData/DataXML/ProductData/ProductParty/ProductCategory[@code != ''Protection'']/Product/FundValue)[1]', 
           'nvarchar(50)' 
           )) = 0 
     THEN 0 
     WHEN 
     EXISTS 
     (
      SELECT 
       1 
      FROM E.[Xml].nodes(
       'declare default element namespace "http://www.focus-solutions.co.uk/focus360/1.0"; 
       /Event/Data/CustomData/DataXML/ProductData/ProductParty/ProductCategory[@code != ''Protection'']/Product') as P(E) 
      HAVING SUM(P.E.value(
            'declare default element namespace "http://www.focus-solutions.co.uk/focus360/1.0"; 
            (FundValue)[1]', 
            'decimal' 
            )) <= @TotalHHInternalTo 
     ) 
     THEN 1 
     ELSE 0 END = 1 
+0

Richard가 제안한대로 변경했습니다. 여전히 동일한 오류가 발생합니다. nvarchar를 데이터 형식 numeric으로 변환하는 산술 오버플로 오류. rajn70

+0

적어도이 오류의 원인이되는 작은 부분을 XML 조각에 게시 할 수 있습니까? 분열하고 정복하기가 너무 어렵지 않아야합니다. – RichardTheKiwi

+0

이것은 FundValue를 가져 오는 xml입니다. – rajn70

관련 문제