如何在 varbinary 中转换 varchar?

How to cast varchar in varbinary?

我尝试通过附加 varchar 字符串来更新列值。

MyTable{
   Id int,
   MyValueColumn varbinary(max),
   MyParamColumn varchar(50)
}

我如何追加:

'{"ZoneId":'+cast ([MyValueColumn] as varchar)+', "ZoneName":"'+[MyParamColumn]+'"}'

而这个 return 正确值:

    '{"ZoneId":1018, "ZoneName":"szz"}'

但现在我将结果转换为 varbinary 并再次将其转换为 varchar(用于检查 varbinary 的正确性):

    cast (cast('{"ZoneId":'+cast ([MyValueColumn] as varchar)+', "ZoneName":"'+[MyParamColumn]+'"}' as varbinary) as varchar)

结果:

'{"ZoneId":1018

有什么问题吗?

当您使用 castvarbinary 而没有明确指定长度时,默认长度为 30。

因此,如果您使用的是 varbinary,而不是 varbinary(n)varbinary(max),那么您的数据可能会发生一些修剪。

参考MSDN

注意:

此外,您在查询中遗漏了 'cast (cast({"ZoneId":' 应该是 cast (cast('{"ZoneId":'

更新

我创建了一个简单的例子:

declare @text varchar(50)
select @text = '{"ZoneId":'+cast (1018 as varchar)+', "ZoneName":"'+'szz'+'"}'

select cast(cast(@text as varbinary) as varchar)
select cast(cast(@text as varbinary(max)) as varchar(max))

当我们使用 varbinary(max)

时,它会为您提供首次投射中的修剪文本和原始未修剪文本