2010-12-06 5 views
4

Je lance une requête qui renvoie des nombres décimaux, puis en insérant ces nombres décimaux dans une variable de table. Quand j'interroge la variable de la table, j'obtiens des entiers. Quelqu'un peut-il voir pourquoi cela se passe et comment corriger? Utilisation de Sql Server 2000.Les valeurs décimales SQL sont insérées en tant qu'ints

DECLARE @Nov Table(custCode varchar(10), PromiseAvg decimal, ShipAvg decimal) 

INSERT INTO @Nov 
SELECT JM.CustomerCode 
    , isnull(AVG(Cast(DATEDIFF(dd, ISNULL(startDate, 0), ISNULL(PromiseDate, 0)) As Decimal)),0) As PromiseAvg 
    , isnull(AVG(Cast(DATEDIFF(dd, ISNULL(startDate, 0), ISNULL(BOL.ShipDate, 0)) As Decimal)),0) As ShipAvg 
from jobitems JI 
LEFT JOIN jobmaster JM ON JI.Job_Number = JM.JobNumber 
LEFT JOIN dbo.NCL_BOLDetails BD ON JM.JobNumber = BD.JobNumber AND JI.Item_Code = BD.ItemNumber 
INNER JOIN dbo.NCL_BOLs BOL ON BD.BOLID = BOL.BOLID 
WHERE StartDate BETWEEN '20091101' AND '20091130'  
Group By JM.CustomerCode, JM.CustLongName 
Order By JM.CustomerCode 

Select * from @Nov 

Répondre

6

Vous devez définir une échelle et une précision pour vos décimales dans la variable de table.

par exemple.

DECLARE @Nov TABLE(
custCode VARCHAR(10), 
PromiseAvg decimal(18,8), 
ShipAvg decimal(18,8)) 

ou quelle que soit l'échelle et la précision qui vous conviennent. Je viens de tester sur SQL Server 2008 et il semble que decimal(18,0) est la valeur par défaut si cela n'est pas spécifié dans une instruction create table.

font également la même chose avec votre cast s

... 
isnull(AVG(Cast(DATEDIFF(dd, ISNULL(startDate, 0), ISNULL(PromiseDate, 0)) 
As decimal(18,8))),0) As PromiseAvg, 
.... 
+0

Comment cela se fait? Où doit-il être fait? – MAW74656

+0

En fait, cela fonctionne en définissant cela dans la variable de table, sans même le mettre sur les moulages. Merci, je vais accepter dès que le temps expire. – MAW74656

Questions connexes