Pertimbangkan dua pernyataan berikut:
PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0);
Kedua pernyataan kembali -1
; bukankah itu salah karena nilai biner kedua adalah desimal 65.536 lebih tinggi dari nilai pertama, bukan?
Tentunya ini bukan karena pemotongan diam?
Jika saya menjalankan pernyataan berikut:
PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0);
Saya disajikan dengan kesalahan berikut:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varbinary to numeric.
Bagaimana saya bisa mendiagnosis apa yang terjadi di sini?
Saya menjalankan ini pada SQL Server 2012, v11.0.5058. Hasilnya sama pada SQL Server 2008 R2 SP2, SQL Server 2005, dan 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);