Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbarui bidang varbinary(MAX) di SQLServer 2012 Hilang 4 bit terakhir

Tampaknya konstanta biner 0xFFD8F...6DC0676 yang Anda gunakan untuk pembaruan berisi jumlah digit heksagonal ganjil. Dan SqlServer menambahkan setengah byte di awal pola sehingga mewakili seluruh jumlah byte.

Anda dapat melihat efek yang sama menjalankan kueri sederhana berikut:

select 0x1, 0x104

Ini akan mengembalikan 0x01 dan 0x0104 .

Pemotongan tersebut mungkin disebabkan oleh beberapa keterbatasan dalam SSMS, yang dapat diamati pada percobaan berikut:

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

Hasil yang dikembalikan adalah 65536 dan 0x123456789ABCDEF0...EF0123456789ABCD , namun jika di SSMS saya menyalin kolom Data saya mendapatkan pola dengan panjang 43677 karakter (ini tanpa awalan 0x), yaitu 21838.5 byte secara efektif. Jadi sepertinya Anda tidak boleh (jika Anda melakukannya) mengandalkan nilai data biner panjang yang diperoleh melalui salin/tempel di SSMS.

Alternatif yang dapat diandalkan dapat menggunakan variabel perantara:

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. Bagaimana cara mengembalikan dua kolom dari tabel pertama jika hanya satu kolom yang cocok sebagian dengan yang kedua?

  2. SQL Server:Apa artinya 1 ++ 2?

  3. Nama kolom tidak valid, pada kolom yang dibuat pernyataan pilih

  4. Perbandingan string SQL, lebih besar dari dan lebih kecil dari operator

  5. Urutan vs identitas