Изглежда, че двоичната константа 0xFFD8F...6DC0676
който сте използвали за актуализация, съдържа нечетен брой шестнадесетични цифри. И SqlServer добави половин байт в началото на модела, така че да представлява цял брой байтове.
Можете да видите същия ефект при изпълнение на следната проста заявка:
select 0x1, 0x104
Това ще върне 0x01
и 0x0104
.
Отрязването може да се дължи на някои ограничения в SSMS, които могат да се наблюдават в следния експеримент:
declare @b varbinary(max)
set @b = 0x123456789ABCDEF0
set @b = convert(varbinary(max), replicate(@b, 65536/datalength(@b)))
select datalength(@b) DataLength, @b Data
Върнатите резултати са 65536
и 0x123456789ABCDEF0...EF0123456789ABCD
, но ако в SSMS копирам колона с данни, получавам модел с дължина 43677 знака (това е без водещ 0x), което е 21838,5 байта ефективно. Така че изглежда не трябва (ако го правите) да разчитате на дълги стойности на двоични данни, получени чрез копиране/поставяне в SSMS.
Надеждната алтернатива може да бъде използването на междинна променлива:
declare @data varbinary(max)
select @data = DataXXX from Table_XXX where ID = XXX
update Table_YYY set DataYYY = @data where ID = YYY