算术溢出错误在存储过程(参数)计算中将varchar转换为数据类型numeric

时间:2014-02-27 11:57:27

标签: sql stored-procedures sql-server-2008-r2

我想要计算包括增值税,出货成本,总额的爷爷,同时使用@total计算总数来获取算术溢出错误将varchar转换为数据类型数字error.how来解决此问题

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

1 个答案:

答案 0 :(得分:0)

您的错误与计算无关,这是因为您已将@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,Level 16,State 6,Line 3

     

将varchar转换为数据类型numeric的算术溢出错误。

对于它的价值,你的查询还有无数的其他错误,或者我看不到背后的逻辑的操作,但是根本不清楚你想要实现什么,所以我不能建议另一种选择。我会指出,根本不需要动态SQL!