Considera le seguenti due affermazioni:
PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0);
Entrambe le dichiarazioni ritornano -1
; non è errato poiché il secondo valore binario è decimale 65.536 maggiore del primo valore, non è vero?
Sicuramente questo non può essere dovuto al troncamento silenzioso?
Se eseguo le seguenti dichiarazioni:
PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0);
Mi viene presentato il seguente errore:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varbinary to numeric.
Come posso diagnosticare cosa sta succedendo qui?
Sto eseguendo questo su SQL Server 2012, v11.0.5058. I risultati sono gli stessi su SQL Server 2008 R2 SP2, SQL Server 2005 e SQL Server 2000.
PRINT CONVERT(NUMERIC(38, 0), convert(int, 0x00000001), 0); PRINT CONVERT(NUMERIC(38, 0), convert(int, 0x00010001), 0);
.
SELECT CONVERT(VARBINARY(32), 1), CONVERT(VARBINARY(32), 1.0);