Rozważ następujące dwa stwierdzenia:
PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0);
Oba wyrażenia powracają -1
; czy to nie jest niepoprawne, ponieważ druga wartość binarna jest o 65.536 dziesiętna wyższa od pierwszej wartości, prawda?
Z pewnością nie może to wynikać z cichego obcinania?
Jeśli uruchomię następujące instrukcje:
PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0);
Pojawia się następujący błąd:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varbinary to numeric.
Jak zdiagnozować, co się tutaj dzieje?
Używam tego na SQL Server 2012, wersja 11.0.5058. Wyniki są takie same dla SQL Server 2008 R2 SP2, SQL Server 2005 i 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);