2015-03-03 3 views
0

Я пытаюсь обновить значение столбца, добавив строки varchar.Как нарисовать varchar в varbinary?

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) 

и resu lt:

'{"ZoneId":1018 

Что может быть неправильным?

+0

Плохая копия/вставка? Проверьте свою последнюю версию sql для точности. –

+0

@lc. Я уверен, что вопрос о копировании правильно задан. Не удается найти ошибку. –

+0

@Io. О, я потерял одну цитату. –

ответ

2

При использовании cast к varbinary без явного задания длины длины по умолчанию равно 30.

Таким образом, некоторая подгонка данных могут происходит, если вы используете varbinary, не varbinary(n) или varbinary(max) явно.

См. MSDN для справки.

Примечание:

Также вы пропустили ' в вашем запросе: cast (cast({"ZoneId":' должен быть cast (cast('{"ZoneId":'

Update

Я создал простой пример:

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) помогает мне. Спасибо! –

Смежные вопросы