Parece que a constante binária
0xFFD8F...6DC0676
que você usou para atualização contém um número ímpar de dígitos hexadecimais. E o SqlServer adicionou meio byte no início do padrão para que ele representasse o número inteiro de bytes. Você pode ver o mesmo efeito executando a seguinte consulta simples:
select 0x1, 0x104
Isso retornará
0x01
e 0x0104
. O truncamento pode ser devido a algumas limitações no SSMS, que podem ser observadas no seguinte experimento:
declare @b varbinary(max)
set @b = 0x123456789ABCDEF0
set @b = convert(varbinary(max), replicate(@b, 65536/datalength(@b)))
select datalength(@b) DataLength, @b Data
Os resultados retornados são
65536
e 0x123456789ABCDEF0...EF0123456789ABCD
, no entanto, se no SSMS eu copiar a coluna Data, estou obtendo um padrão de 43677 caracteres de comprimento (isso sem o 0x inicial), que é 21838,5 bytes efetivamente. Portanto, parece que você não deve (se o fizer) confiar em valores de dados binários longos obtidos por meio de copiar/colar no SSMS. A alternativa confiável pode ser usar a variável intermediária:
declare @data varbinary(max)
select @data = DataXXX from Table_XXX where ID = XXX
update Table_YYY set DataYYY = @data where ID = YYY