Es scheint, dass die binäre Konstante 0xFFD8F...6DC0676
die Sie für das Update verwendet haben, enthält eine ungerade Anzahl von Hexadezimalziffern. Und der SqlServer fügte am Anfang des Musters ein halbes Byte hinzu, sodass es eine ganze Anzahl von Bytes darstellt.
Sie können den gleichen Effekt sehen, wenn Sie die folgende einfache Abfrage ausführen:
select 0x1, 0x104
Dies gibt 0x01
zurück und 0x0104
.
Die Kürzung kann auf einige Einschränkungen in SSMS zurückzuführen sein, die im folgenden Experiment beobachtet werden können:
declare @b varbinary(max)
set @b = 0x123456789ABCDEF0
set @b = convert(varbinary(max), replicate(@b, 65536/datalength(@b)))
select datalength(@b) DataLength, @b Data
Die zurückgegebenen Ergebnisse sind 65536
und 0x123456789ABCDEF0...EF0123456789ABCD
, wenn ich jedoch in SSMS die Datenspalte kopiere, erhalte ich ein Muster mit einer Länge von 43677 Zeichen (ohne führendes 0x), was effektiv 21838,5 Bytes entspricht. Es scheint also, dass Sie sich (falls Sie dies tun) nicht auf lange binäre Datenwerte verlassen sollten, die Sie per Kopieren/Einfügen in SSMS erhalten.
Die zuverlässige Alternative kann die Verwendung einer Zwischenvariablen sein:
declare @data varbinary(max)
select @data = DataXXX from Table_XXX where ID = XXX
update Table_YYY set DataYYY = @data where ID = YYY