【问题标题】:Store "9999999.00000000" in SQL Server 2008 R2: Arithmetic overflow error converting numeric to data type numeric在 SQL Server 2008 R2 中存储“9999999.00000000”:将数字转换为数据类型数字的算术溢出错误
【发布时间】:2014-08-22 08:12:45
【问题描述】:

我正在尝试将9999999.00000000 存储在 SQL Server 2008 R2 中。但是,我一再面临这个错误

将数值转换为数值数据类型时出现算术溢出错误。

数据库列的类型为DECIMAL(15,8)

请告诉我,如何解决它..

C#代码:

  loSqlParameters.Add(new SqlParameter("RUN", loOPERATION_TYPE.RUN.handleDBNull()));

  xxxx.Database.ExecuteSqlCommand("SPNAME".getSql(loSqlParameters), loSqlParameters.Cast<object>().ToArray())

SQL Server 存储过程:

 CREATE PROCEDURE [dbo].[SPNAME]  
     @RUN AS DECIMAL(15,8)
 AS    
 BEGIN 
    INSERT INTO TABLENAME (RUN) VALUES  (@RUN)
 END    

表架构:

Column Name     Data Type       Allow Nulls
RUN             decimal(15,8)    yes

【问题讨论】:

  • @a_horse_with_no_name :我认为,这不算数.. 请在 SQL SERVER SELECT CONVERT(DECIMAL(15,8),9999999) 中尝试此操作
  • 看起来其他值被拒绝了。请您发布更多代码,展示您如何获取和使用相关价值?
  • @Neil Moss:现在您可以提出建议,如何解决它。如果您需要任何其他详细信息,请告诉我..
  • 在 SQL Server 2012 的 T-SQL 中工作得很好......我看不出你在 C# 代码中如何以及在何处设置 SqlParameter .....跨度>
  • 我认为您应该注意来自 loSqlParameters 的值 - 我希望其中一个超出范围。在自己的操作中执行 'loSqlParameters.Cast().ToArray()' 表达式并将结果保存到变量中。监视该变量,或者您可以使用条件断点仅在值 >= 10000000 或 时中断

标签: sql sql-server


【解决方案1】:

当在 SSMS 中执行时,这在 SQL2008R2 中可以正常工作。如果您运行 SQL Profiler 并捕获应用程序提交的 SQL 文本,则可以检查存储过程调用,包括传递给该过程的参数。发送的参数值可能不是您期望发送的值。

我的 SQL 测试代码:

    CREATE TABLE MyTable
    (
      Run decimal(15, 8) NULL
    );
    GO

    CREATE PROCEDURE dbo.spName
        @Run AS DECIMAL(15,8)
    AS    
    BEGIN 
      INSERT INTO MyTable(Run) VALUES(@Run)
    END;
    GO

    EXEC dbo.spName 9999999.00000000;
    GO

    SELECT *
    FROM MyTable;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 2021-10-29
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多