バイナリ定数 0xFFD8F...6DC0676
のようです 更新に使用した には、奇数の 16 進数が含まれています。また、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