2010-08-10 5 views
3

Je rencontre un problème dans la requête ci-dessous. La question est:Erreur de dépassement arithmétique lors de la conversion de l'expression en type de données int

Msg 8115, niveau 16, état 2, ligne 1 erreur de dépassement arithmétique conversion expression en type de données int

La question se trouve dans cette ligne du code ci-dessous.

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

Des idées?

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 

Répondre

3

ressemble à un des AccountNo dans cette ligne INNER JOIN Test t ON a.AccountNO <> t.AccountNo n'est pas un entier et a un valuse qui ne peut être converti en un entier

quel est le type de données de la colonne dans les deux tables

+0

Ils sont tous deux VARCHAR (32) – dcpartners

+0

dans ce cas, exécutez toutes les requêtes une par une, commencez par une requête et continuez jusqu'à ce que vous les exécutiez toutes, celle qui échoue aura le problème, puis examinez ce qui est stocké dans ces requêtes. colonnes – SQLMenace

+0

Vous avez raison! La question n'est pas vraiment sur cette déclaration. J'ai SUM (DurationSecond) et c'est plus grand que INT après l'avoir rejoint. :) Merci encore. – dcpartners

0

Parfois, les valeurs de la requête sql ont des valeurs plus grandes qu'un entier peut contenir, alors changez le type de données de int (entier) à Bigint, le problème est résolu.

+0

s'il vous plaît donner la limite sur l'entier pour SQLServer – user1428716

+1

-2,147,483,647 à 2,147,483,647 http://msdn.microsoft.com/fr-fr/library/ms187745.aspx – jjzd2w

Questions connexes