Ligesom tilføjelse af flydetypen er unøjagtig, kan multiplikation af decimaltyperne være unøjagtig (eller forårsage unøjagtighed), hvis du overskrider præcisionen. Se Datatypekonvertering og decimal og numerisk .
Siden du har ganget NUMERIC(24,8)
og NUMERISK(24,8) , og SQL Server vil kun kontrollere typen og ikke indholdet, vil den sandsynligvis forsøge at gemme de potentielle 16 ikke-decimale cifre (24 - 8), når den ikke kan gemme alle 48 cifre med præcision (maks. er 38). Hvis du kombinerer to af dem, får du 32 ikke-decimale cifre, hvilket giver dig kun 6 decimale cifre (38 - 32).
Således den oprindelige forespørgsel
SELECT A, B, C, A + B * C
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C ) T
reduceres til
SELECT A, B, C, A + D
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C,
CAST(0 AS NUMERIC(38,6)) AS D ) T
Igen, mellem NUMERIC(24,8)
og NUMERISK(38,6) , vil SQL Server forsøge at gemme de potentielle 32 cifre af ikke-decimaler, så
A + D
reduceres til
SELECT CAST(0.12345678 AS NUMERIC(38,6))
hvilket giver dig 0.123457
efter afrunding.