【问题标题】:Arithmetic overflow error converting expression to data type int将表达式转换为数据类型 int 的算术溢出错误
【发布时间】:2023-03-15 08:47:01
【问题描述】:

我在下面的查询中遇到问题。问题是:

消息 8115,第 16 级,状态 2,第 1 行 将表达式转换为数据类型 int 的算术溢出错误

问题出在下面这行代码中。

INNER JOIN Test t ON a.AccountNO <> t.AccountNo

有什么想法吗?

WITH TEST AS
(
    SELECT DISTINCT AccountNo, SUBSTRING(APartyNO, 3, LEN(APartyNo)) AS APartyNoCut
    FROM (SELECT DISTINCT AccountNo, APartyNo 
            FROM prf_BatchItems 
           WHERE BatchID = 127 
             AND Code1 = 'DEDF' 
             AND APartyNo NOT LIKE '04%'
             AND (   Left(APartyNo,2) = '02' 
                  OR Left(APartyNo,2) = '03' 
                  OR Left(APartyNo,2) = '07'
                  OR Left(APartyNo,2) = '08')
        GROUP BY AccountNo, APartyNo
    UNION
    SELECT DISTINCT AccountNo, APartyNo 
      FROM prf_BatchItemAdditionalAPartyNos 
     WHERE BatchID = 127 
  GROUP BY AccountNo, APartyNo) a
)
SELECT Code2, TypeName, CallTypeName, --SUM([Count]), 
        SUM(Duration), SUM(CostGrossExGST)
FROM
( 
    SELECT 'WITHOUT STD' AS Type, 
            Code2, b.TypeName, CallTypeName,
            --SUM([COunt]) AS Count,  
            SUM(DurationSecond) AS Duration, 
            SUM(a.CostGrossExGSt) AS CostGrossExGST 
    FROM prf_BatchItems a 
            INNER JOIN (SELECT * FROM dbo.prf_BillTypeCodes WHERE BillTypeID = 2)  b ON a.Code2 = b.BillCodeName
            INNER JOIN Test t ON a.AccountNO <> t.AccountNo 
    where BatchID = 127 
            AND Code1 = 'DC'  
            AND ServiceTypeName = 'MobileNet' 
            AND CallTypeName = 'National Direct Dialled calls'
            AND (LEFT(BPartyNo,2) <> '02' AND LEFT(BPartyNo,2) <> '03' OR LEFT(BPartyNo,2) <> '07' OR LEFT(BPartyNo,2) <> '08')
            AND BPartyNo NOT LIKE '04%'
            AND BPartyNo NOT LIKE '1%'
    GROUP BY --a.AccountNo, 
            Code2,  b.TypeName, CallTypeName) zz 
GROUP BY Code2,  TypeName, CallTypeName

【问题讨论】:

    标签: sql-server-2005 tsql


    【解决方案1】:

    看起来这行 INNER JOIN Test t ON a.AccountNO &lt;&gt; t.AccountNo 中的一个 AccountNO 不是整数,并且具有无法转换为整数的值

    两个表中列的数据类型是什么

    【讨论】:

    • 在这种情况下,一个一个地运行所有查询,从一个查询开始并继续,直到您运行所有查询,失败的那个会出现问题,然后调查这些列中存储的内容跨度>
    • 你是对的!问题不在于该声明。我确实有 SUM(DurationSecond) 并且加入后它比 INT 大。 :) 再次感谢。
    【解决方案2】:

    有时sql查询中的值大于整数可以容纳的值,所以将数据类型从int(integer)改为Bigint,问题就解决了。

    【讨论】:

    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多