将表达式转换为数据类型int的算术溢出错误

时间:2010-08-10 00:39:27

标签: sql-server-2005 tsql

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

  

Msg 8115,Level 16,State 2,Line 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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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