【发布时间】:2013-01-14 05:15:03
【问题描述】:
我在 SQL Server 中遇到了以下错误(或功能)。
当我使用SUM (*column*) 其中column 具有numeric(18, 8) 类型并将其乘以任何其他数字(整数或十进制)时,结果精度会降低到numeric(18, 6)。
这是要演示的示例脚本。
CREATE TABLE #temp (Qnty numeric(18,8))
INSERT INTO #temp (Qnty) VALUES (0.00000001)
INSERT INTO #temp (Qnty) VALUES (0.00000002)
INSERT INTO #temp (Qnty) VALUES (0.00000003)
SELECT Qnty, 1*Qnty
FROM #temp
SELECT (-1)*SUM(Qnty), SUM(Qnty), -SUM(Qnty), SUM(Qnty) * CAST(2.234 as numeric(18,8))
FROM #temp
DROP TABLE #temp
第二次 SELECT 查询的结果
0.000000 0.00000006 -0.00000006 0.000000
如您所见,我将 SUM 相乘,结果为 0.000000
谁能解释一下这种奇怪的行为?
UPD。我在 2000、2005 和 2008 SQL Server 上的 SQL Management Studio 中执行了这个查询。
【问题讨论】:
-
有点离题(这对您的问题没有帮助),但我相信
NUMERIC不应再在 SQL Server 中使用 -DECIMAL应该取而代之。 -
感谢您的建议。但小数点结果相同
-
我知道 :) 这就是为什么我说
(and it doesn't help your problem) -
从#tmp 中选择peristanttable 并检查resultdatatype 将在Numeric(38,6) 上显示字段类型,SUM(Qnty*1.0) 将导致numeric(38, 9)
标签: sql-server sql-server-2008 sql-server-2005