【问题标题】:SQL: Arithmetic overflow error converting numeric data type to numericSQL:将数值数据类型转换为数值时出现算术溢出错误
【发布时间】:2019-01-24 10:07:34
【问题描述】:

我正在尝试创建以下视图:

CREATE VIEW [dbo].[_TEST]
AS
    SELECT
        a.[PS],
        b.[A0001],
        CAST(a.[Area] AS DECIMAL(15, 10)) AS A0002,
        CAST((b.[0001] / a.[Area]) AS DECIMAL(15, 10)) AS A0003
    FROM
        dbo.Areas AS a
    INNER JOIN
        (SELECT 
             LEFT(PSOA, 6) AS PS, SUM([0001]) as A0001
         FROM 
             dbo.Counts
         GROUP BY 
             LEFT(PSOA, 6) AS b ON a.PS = b.PS

视图创建正常,但使用时出现以下错误:

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

现在,据我了解,这意味着这些值太大而无法放入Decimal(15,10)。但是,手动计算它们,我得到的A0003 的最大值是2151.93382,这对于Decimal(15,10) 来说很好。我什至尝试了Decimal(20,10) 以确保它返回相同的错误。数字肯定不会太大,怎么回事?

【问题讨论】:

  • However, manually calculating them ...不要手动计算任何东西。从您的表中执行SELECT MAX(value) 并查看实际最大值是多少。

标签: sql sql-server


【解决方案1】:

我发现最大面积值实际上是一个 Decimal(16,10) 来解释这一点。不知道我是怎么错过的!

【讨论】:

    【解决方案2】:

    这并没有给出错误,该错误可能是由于其他原因造成的。请检查您的其他可能比这更大的数据。

    Select Cast(2151.93382 as Decimal(15,10))
    

    您可以查看演示here

    表中有多少行我认为SUM([0001]) 可以产生很大的数字导致算术溢出异常。

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多