将数据类型varchar转换为sql中的varbinary仅在少数值时出错

时间:2017-07-26 07:13:13

标签: sql-server

IF(ISNUMERIC(RTRIM(LTRIM('83B1B88'))) = 0)
select CONVERT(VARCHAR, CONVERT(INT, CONVERT(VARBINARY, CONVERT(VARCHAR, '0x' + '83B1B88'), 1)))

我不确定为什么sql会抛出将数据类型varchar转换为varbinary的错误 我仅针对1B91B32169DF9013077B5

等值获取此例外

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

您将1的样式传递给CONVERT

  

如果data_type是二进制类型,则表达式必须是字符表达式。表达式必须由偶数个十六进制数字组成(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,a,b,c ,d,e,f)。如果样式设置为1,则字符0x必须是表达式中的前两个字符。 如果表达式包含奇数个字符,或者如果任何字符无效,则会引发错误。

我的重点。

所有无效序列的例子似乎都有奇数长度。如果您有一个奇数长度序列,则应添加填充0。无论您在开始还是结束时填写,都取决于您的确切要求,顺序来自哪里等等。