Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Актуализирайте полето varbinary(MAX) в SQLServer 2012 Загубени последните 4 бита

Изглежда, че двоичната константа 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте FILE_IDEX(), за да върнете идентификатора на файл с база данни в SQL Server

  2. Извадете часовете от резултата от заявката на SQL Server 2012

  3. SQL заявка, която прави разлика между ß и ss

  4. SQL Server, nvarchar(MAX) или ntext, изображение или varbinary?

  5. Процентът на SQL Server 2005 в скоби в осевата таблица