簡體   English   中英

在存儲過程(參數化)計算中將varchar轉換為數值類型的算術溢出錯誤

[英]Arithmetic overflow error converting varchar to data type numeric in the stored procedure (parameterised) caluculation

我想計算包含增值稅,運輸成本,總計的總和,同時通過使用@total計算總計來獲得將varchar轉換為數據類型數值錯誤的算術溢出錯誤。如何解決此問題

PROCEDURE   [dbo].[GrandTotal] 
@GrandTotal decimal(10,2)



as
BEGIN

DECLARE @1stQuery AS NVARCHAR(4000)
DECLARE @ParamDefinition AS NVARCHAR(2000)
DECLARE @Total AS decimal (18,12)
DECLARE @vat AS decimal (10,2)
DECLARE @Gtotal AS decimal (10,2)


    set @Total =  'select ((L.Quantity*L.Price)- L.DiscountValue-((O.AllocatedPoint / 100) * O.ExchangeRate))AS Total 
                    FROM [Orders] O 
                   LEFT JOIN [LineItem] L  ON O.[OrderId]  = L.[OrderId]  where L.[StatusCode] IN (''AS'', ''PP'',  ''P'',''PS'',''O'',''OH'',''SC'',''D'', ''GA'',''SW'')'


set @vat = @Total / (100 + 20) * 20;

set @Gtotal =@Total-@vat

set  @1stQuery =  
 ' select   orderid,GrandTotal from (SELECT  O.[OrderId],
     CAST( ROUND((@Gtotal+O.ShippingCost),2)AS DECIMAL(10,2)) AS GrandTotal
    FROM    LineItem L 
             left JOIN [Orders] O  ON O.[OrderId]  = L.[OrderId]
             left join [Country] C on O.[CountryId] = c.[CountryId]
               )as gt where 1=1 
         '


    if @GrandTotal  is not null 

    SET @1stQuery = @1stQuery + 'and  gt.[GrandTotal] = @GrandTotal   ' 


    set @ParamDefinition='@GrandTotal decimal (10,2),@Total decimal(18,12),@Gtotal decimal(10,2),@vat decimal(10,2)
                          '

   EXECUTE sp_Executesql @1stQuery,
                            @ParamDefinition,
                            @GrandTotal,
                            @Total,
                            @Gtotal,@vat


END

您的錯誤與計算無關,這是因為您已將@total聲明為十進制,然后為其分配了字符串值。 您可以使用以下方法重新創建錯誤:

DECLARE @Total AS decimal (18,12)

set @Total =  'select ((L.Quantity*L.Price)- L.DiscountValue-((O.AllocatedPoint / 100) * O.ExchangeRate))AS Total 
                FROM [Orders] O 
               LEFT JOIN [LineItem] L  ON O.[OrderId]  = L.[OrderId]  where L.[StatusCode] IN (''AS'', ''PP'',  ''P'',''PS'',''O'',''OH'',''SC'',''D'', ''GA'',''SW'')'

哪個產量

Msg 8115,第16級,狀態6,第3行

將varchar轉換為數值數據類型的算術溢出錯誤。

就其價值而言,您的查詢中還有無數其他錯誤,或者我看不到其背后的邏輯的操作,但是您尚不清楚要實現的目標,因此,我還無法提出其他選擇。 我將指出,盡管根本不需要動態SQL!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM