SQL:算术溢出错误将数值数据类型转换为数值

时间:2019-01-24 10:07:35

标签: sql sql-server

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

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)只是为了确保返回相同的错误。这些数字肯定不会太大,那么怎么了?

2 个答案:

答案 0 :(得分:0)

这没有给出错误,并且该错误可能是由于其他原因引起的。检查可能大于此值的其他数据。

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

您可以查看演示here

我认为表SUM([0001])中有多少行会产生大量数字,从而导致算术溢出异常。

答案 1 :(得分:0)

我发现最大Area值实际上是一个Decimal(16,10),这可以解释这一点。不知道我怎么想念它!

相关问题