2015-03-03 103 views
0

我尝试通过附加varchar字符串来更新列值。如何在varbinary中转换varchar?

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

我怎么追加:

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

这回正确的值:

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

但现在我在VARBINARY投结果和VARCHAR再次施放它(用于检查VARBINARY correcy) :

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

and resu lt:

'{"ZoneId":1018 

什么可能是错的?

+0

错误的复制/粘贴?检查你的最后一个sql语句的准确性。 – 2015-03-03 09:57:01

+0

@lc。我确定复制查询正确的问题。找不到错误。 – 2015-03-03 10:04:11

+0

@ Io。哦,我已经失去了一个报价。 – 2015-03-03 10:10:59

回答

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)

+0

使用varbinary(max)和varchar(max)可以帮助我。谢谢! – 2015-03-03 10:12:36