Ini sangat mirip dengan:SELECT SUM(...) is non-deterministic when adding the column-values of datatype float .
Masalahnya adalah dengan tipe data yang tidak akurat (FLOAT/REAL ) urutan operasi aritmatika pada masalah floating point. Demo dari koneksi:
DECLARE @fl FLOAT = 100000000000000000000
DECLARE @i SMALLINT = 0
WHILE (@i < 100)
BEGIN
SET @fl = @fl + CONVERT(float, 5000)
SET @i = @i + 1
END
SET @fl = @fl - 100000000000000000000
SELECT CONVERT(NVARCHAR(40), @fl, 2)
-- 0.000000000000000e+000
DECLARE @fl FLOAT = 0
DECLARE @i SMALLINT = 0
WHILE (@i < 100)
BEGIN
SET @fl = @fl + CONVERT(float, 5000)
SET @i = @i + 1
END
SET @fl = @fl + 100000000000000000000
SET @fl = @fl - 100000000000000000000
SELECT @fl
-- 507904
LiveDemo
Kemungkinan solusi:
CASTsemua argumen ke tipe data yang akurat sepertiDECIMAL/NUMERIC- ubah tabel dan ubah
FLOATkeDECIMAL - Anda dapat mencoba memaksa pengoptimal kueri untuk menghitung jumlah dengan urutan yang sama.
Kabar baiknya adalah ketika hasil kueri yang stabil penting bagi aplikasi Anda, Anda dapat memaksa agar urutannya sama dengan mencegah paralelisme dengan OPTION (MAXDOP 1) .
Sepertinya tautan awal sudah mati. Arsip Web