我尝试通过附加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
什么可能是错的?
答案 0 :(得分:2)
当您使用cast
到varbinary
而没有明确规定长度时,默认长度为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)