2012-10-29 124 views
0

我有一個存儲過程,可以在我的本地環境以及QA環境中正常工作。將nvarchar轉換爲數據類型的算術溢出錯誤數字

然而,在客戶端處的UAT環境它給出了錯誤

System.Data.SqlClient.SqlException:
消息號= 「8115」 嚴重性= 「16」 狀態=「8 「>算術溢出錯誤 將nvarchar轉換爲數據類型數字。

它也適用於安裝在客戶端位置的本地實例之一。 我發現的代碼賦予通過註釋/ umcommenting行代碼的錯誤的行和置零它下降到

(
     @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 
      ) 
     ) 
    ) 

可變@TotalHHInternalTo是十進制類型的參數,其是傳遞給存儲搜索條件的一部分程序作爲一個XML。在產品派對下,我有4個產品類別,除類型保護外,我需要總計所有基金價值。如果這三種類型的總和小於@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的建議進行了更改,但它仍然給出相同的錯誤。 <消息號=「8115」嚴重性=「16」狀態=「8」>將nvarchar轉換爲數據類型數值的算術溢出錯誤。 – rajn70

+0

你能發佈你的XML片段嗎,至少有一小部分會導致這個錯誤?分而治之不應該太難。 – RichardTheKiwi

+0

這是我從何處獲取FundValue的xml: – rajn70

相關問題