Tampaknya konstanta biner 0xFFD8F...6DC0676
yang Anda gunakan untuk pembaruan berisi jumlah digit heksagonal ganjil. Dan SqlServer menambahkan setengah byte di awal pola sehingga mewakili seluruh jumlah byte.
Anda dapat melihat efek yang sama menjalankan kueri sederhana berikut:
select 0x1, 0x104
Ini akan mengembalikan 0x01
dan 0x0104
.
Pemotongan tersebut mungkin disebabkan oleh beberapa keterbatasan dalam SSMS, yang dapat diamati pada percobaan berikut:
declare @b varbinary(max)
set @b = 0x123456789ABCDEF0
set @b = convert(varbinary(max), replicate(@b, 65536/datalength(@b)))
select datalength(@b) DataLength, @b Data
Hasil yang dikembalikan adalah 65536
dan 0x123456789ABCDEF0...EF0123456789ABCD
, namun jika di SSMS saya menyalin kolom Data saya mendapatkan pola dengan panjang 43677 karakter (ini tanpa awalan 0x), yaitu 21838.5 byte secara efektif. Jadi sepertinya Anda tidak boleh (jika Anda melakukannya) mengandalkan nilai data biner panjang yang diperoleh melalui salin/tempel di SSMS.
Alternatif yang dapat diandalkan dapat menggunakan variabel perantara:
declare @data varbinary(max)
select @data = DataXXX from Table_XXX where ID = XXX
update Table_YYY set DataYYY = @data where ID = YYY