如何在varbinary中转换varchar?

时间:2015-03-03 09:54:15

标签: sql sql-server sql-server-2008-r2

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

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

我如何追加:

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

这会返回正确的值:

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

但是现在我将结果转换为varbinary并再次在varchar中进行转换(对于check varbinary correcy):

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

和结果:

'{"ZoneId":1018

什么可能是错的?

1 个答案:

答案 0 :(得分:2)

当您使用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)

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