Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zaktualizuj pole varbinary (MAX) w SQLServer 2012 Utracono ostatnie 4 bity

Wygląda na to, że stała binarna 0xFFD8F...6DC0676 użyty do aktualizacji zawiera nieparzystą liczbę cyfr szesnastkowych. A SqlServer dodał pół bajtu na początku wzorca, aby reprezentował całą liczbę bajtów.

Możesz zobaczyć ten sam efekt, uruchamiając następujące proste zapytanie:

select 0x1, 0x104

To zwróci 0x01 i 0x0104 .

Obcięcie może wynikać z pewnych ograniczeń w SSMS, które można zaobserwować w następującym eksperymencie:

declare @b varbinary(max)
set @b = 0x123456789ABCDEF0
set @b = convert(varbinary(max), replicate(@b, 65536/datalength(@b)))
select datalength(@b) DataLength, @b Data

Zwracane wyniki to 65536 i 0x123456789ABCDEF0...EF0123456789ABCD , jednak jeśli w SSMS skopiuję kolumnę Data otrzymuję wzorzec o długości 43677 znaków (bez wiodącego 0x), czyli efektywnie 21838,5 bajtów. Wygląda więc na to, że nie powinieneś (jeśli tak) polegać na długich wartościach danych binarnych uzyskanych poprzez kopiowanie/wklejanie w SSMS.

Niezawodną alternatywą może być użycie zmiennej pośredniej:

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. Stronicowanie wyników SQL Server 2005

  2. Nie widać konwersji SQL z varchar na uniqueidentifier

  3. OBJECT_ID obiektu w innej bazie danych - jak znaleźć identyfikator bazy danych lub nazwę/w pełni kwalifikowaną nazwę obiektu?

  4. Jak zidentyfikować wszystkie procedury składowane odwołujące się do konkretnej tabeli?

  5. SqlConnection i unikanie promocji do MSDTC