2015-03-03 102 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