Десятичные значения SQL вставляются в виде целых - PullRequest
4 голосов
/ 06 декабря 2010

Я выполняю запрос, который возвращает десятичные числа, а затем вставляю эти десятичные числа в переменную таблицы.Когда я запрашиваю переменную таблицы, я получаю целые числа.Кто-нибудь может понять, почему это происходит и как исправить?Использование Sql Server 2000.

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

1 Ответ

6 голосов
/ 06 декабря 2010

Вам необходимо определить масштаб и точность для ваших десятичных знаков в табличной переменной.

например.

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

или любой другой масштаб и точность, которые вам подходят. Я только что проверил на SQL Server 2008, и похоже, что decimal(18,0) является значением по умолчанию, если это не указано в операторе create table.

Также сделайте то же самое с cast s

... 
isnull(AVG(Cast(DATEDIFF(dd, ISNULL(startDate, 0), ISNULL(PromiseDate, 0)) 
As decimal(18,8))),0) As PromiseAvg,
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...