>Ciao ragazzi, perchè eseguendo queste 2 operazioni con SQL 2005
>ottengo 2 risultati diversi?
Leggi questo paragrafo dei Books Online:
http://msdn.microsoft.com/en-us/library/ms190476.aspx
Nel tuo caso come precision avrai:
29 - 13 + 13 + max(6, 13 + 29 + 1) = 72 che supera il numero massimo di 38, pertanto SQL Server sacrificherà lo scale per mantenere il numero massimo di cifre intere.
declare @valore1 decimal(29,13)
declare @valore2 decimal(29,13)
DECLARE @RAPPORTO_B decimal(29,13)
SET @valore1 = 0.1234567896233
SET @valore2 = 1.0000000000000
SELECT @valore1/@valore2 AS Output;
/* Output:
Output
---------------------------------------
0.123456789
(1 row(s) affected)
*/
Se diminuisci la precision otterrai il medesimo risultato:
declare @valore1 decimal(14,13)
declare @valore2 decimal(14,13)
DECLARE @RAPPORTO_B decimal(14,13)
SET @valore1 = 0.1234567896233
SET @valore2 = 1.0000000000000
SELECT @valore1/@valore2 AS Output;
/* Output:
Output
---------------------------------------
0.123456789623300000000000
(1 row(s) affected)
*/
>Ho visto che il @@MAX_PRECISION è 38 ma a me servono 42...
Eh, non puoi.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org