Betrachten Sie die folgenden zwei Aussagen:
PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0);
Beide Anweisungen kehren zurück -1
. Ist das nicht falsch, da der zweite Binärwert 65.536 Dezimalstellen höher ist als der erste?
Das kann doch nicht an stillem Abschneiden liegen?
Wenn ich die folgenden Anweisungen ausführen:
PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0);
Mir wird der folgende Fehler angezeigt:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varbinary to numeric.
Wie kann ich diagnostizieren, was hier passiert?
Ich führe dies unter SQL Server 2012, Version 11.0.5058 aus. Die Ergebnisse sind auf SQL Server 2008 R2 SP2, SQL Server 2005 und SQL Server 2000 identisch.
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);