2010-08-10 50 views
3

我在下面的查询中遇到问题。的问题是:将表达式转换为数据类型的算术溢出错误int

消息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 

回答

3

看起来像AccountNO之一在此行INNER JOIN Test t ON a.AccountNO <> t.AccountNo不是整数,并且具有不能被转换为整数

什么是立柱的两个表

在数据类型的valuse
+0

它们都是VARCHAR(32) – dcpartners 2010-08-10 00:55:47

+0

在这种情况下,逐个运行所有查询,从一个查询开始并继续,直到您运行所有这些查询,失败的查询会遇到问题,然后调查那些存储在这些查询中的内容专栏 – SQLMenace 2010-08-10 01:01:00

+0

你是对的!这个问题并不是真的在这个陈述上。我确实有SUM(DurationSecond),它在加入后比INT大。 :) 再次感谢。 – dcpartners 2010-08-10 01:15:19

0

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

+0

请给出SQLServer的整数限制 – user1428716 2013-02-26 03:00:46

+1

-2,147,483,647至2,147,483,647 http://msdn.microsoft.com/zh-cn/library/ms187745.aspx – jjzd2w 2013-04-23 18:33:46

相关问题