Considérez les deux déclarations suivantes:
PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0);
Les deux déclarations reviennent -1
; n'est-ce pas incorrect puisque la deuxième valeur binaire est supérieure de 65 536 décimales à la première valeur, n'est-ce pas?
Cela ne peut certainement pas être dû à une troncature silencieuse?
Si je lance les instructions suivantes:
PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0);
On me présente l'erreur suivante:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varbinary to numeric.
Comment puis-je diagnostiquer ce qui se passe ici?
J'exécute cela sur SQL Server 2012, v11.0.5058. Les résultats sont les mêmes sur SQL Server 2008 R2 SP2, SQL Server 2005 et 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);