SSMS中的varbinary插入中的附加0

时间:2018-11-21 14:48:29

标签: sql sql-server varbinary

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

我无法摆脱这一点。我尝试了许多工具,例如SSMS导出工具或BCP,但没有成功。最好还是用脚本解决它。

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

1 个答案:

答案 0 :(得分:1)

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       

假设varbinary始终表示字节,这只是SQL Server的不同。