SSMS 中 varbinary 插入的附加 0

Additional 0 in varbinary insert in SSMS

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

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

并且对 varbinary 了解不多(程序生成它),我的唯一目标是复制它:)

0xD0CF11E0A1B11AE10000000

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

这里,SQL 服务器猜测最高位是零,这不会改变字符串的数值。例如:

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 服务器的区别,假设 varbinary 总是代表字节。