Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cập nhật trường varbinary (MAX) trong SQLServer 2012 Bị mất 4 bit cuối cùng

Có vẻ như hằng số nhị phân 0xFFD8F...6DC0676 mà bạn đã sử dụng để cập nhật chứa số lẻ gồm các chữ số hex. Và SqlServer đã thêm nửa byte vào đầu mẫu để nó đại diện cho toàn bộ số byte.

Bạn có thể thấy hiệu ứng tương tự khi chạy truy vấn đơn giản sau:

select 0x1, 0x104

Điều này sẽ trả về 0x010x0104 .

Việc cắt ngắn có thể do một số hạn chế trong SSMS, có thể quan sát thấy trong thử nghiệm sau:

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

Kết quả trả về là 655360x123456789ABCDEF0...EF0123456789ABCD , tuy nhiên, nếu trong SSMS tôi sao chép cột Dữ liệu, tôi sẽ nhận được mẫu có độ dài 43677 ký tự (đây là không có 0x đứng đầu), hiệu quả là 21838,5 byte. Vì vậy, có vẻ như bạn không nên (nếu có) dựa vào các giá trị dữ liệu nhị phân dài thu được thông qua sao chép / dán trong SSMS.

Giải pháp thay thế đáng tin cậy có thể là sử dụng biến trung gian:

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. Ràng buộc biểu thức chính quy SQL Server

  2. Đối sánh dữ liệu từ ba bảng trong Sql Server 2008

  3. Không thể đăng nhập vào SQL Server bằng Windows Authentication

  4. Cách thực hiện đánh dấu kết quả từ truy vấn toàn văn bản của SQL Server

  5. Ghi nhật ký các thay đổi trong máy chủ SQL trong bảng kiểm tra