首页 > 解决方案 > SSMS 中的 varbinary 插入附加 0

问题描述

当我尝试将 varbinary(max) 字段从一个数据库移动到另一个数据库时遇到问题。如果我这样插入: 0xD0CF11E0A1B11AE10000000 它会导致以额外的“0”开头:0x0D0CF11E0A1B11AE10000000

我无法摆脱这一点。我尝试了很多工具,例如 SSMS 导出工具或 BCP,但没有任何成功。无论如何,我最好在脚本中解决它。

并且没有太多关于 varbinary 的知识(程序生成它),我唯一的目标是复制它:)

标签: sqlsql-servervarbinary

解决方案


0xD0CF11E0A1B11AE10000000

该值包含奇数个字符。Varbinary 存储字节。每个字节恰好由两个十六进制字符表示。您要么丢失了一个字符,要么没有存储字节。

在这里,SQL Server 猜测最高有效位是零,这不会改变字符串的数值。例如:

select 0xD0C "value"
    ,cast(0xD0C as int) "as_integer"
    ,cast(0x0D0C as int) "leading_zero"
    ,cast(0xD0C0 as int) "trailing_zero"


 value       3_char     leading_zero     trailing_zero    
 ----------  ---------  ---------------  ---------------- 
 0d0c        3340       3340             53440            

或者:

select 1 "test"
where 0xD0C = 0x0D0C

 test    
 ------- 
 1       

这只是 SQL Server 假设 varbinary 始终表示字节的区别。


推荐阅读