Considere las siguientes dos declaraciones:
PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0);
Ambas declaraciones regresan -1
; ¿No es incorrecto ya que el segundo valor binario es 65.536 decimal más alto que el primer valor, no?
¿Seguramente esto no puede ser debido al truncamiento silencioso?
Si ejecuto las siguientes declaraciones:
PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0);
Me aparece el siguiente error:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varbinary to numeric.
¿Cómo puedo diagnosticar lo que está sucediendo aquí?
Estoy ejecutando esto en SQL Server 2012, v11.0.5058. Los resultados son los mismos en SQL Server 2008 R2 SP2, SQL Server 2005 y 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);