2015-04-23 2 views
2

У меня есть таблица cSc_Role с колонкой RoleSettings. RoleSettings - это тип данных изображения. Контент-это примерно так: 0x504B030414000000080000000000E637CA2A4UPDATE datatype image в SQL-таблице

Теперь мне нужно обновить этот столбец для одной строки. Как это:

UPDATE cSc_Role 
SET RoleSettings = '0x343240000000000E637CA2A430500' 
WHERE Naming = 'User X' 

Но с бинарными данными кажется, что это не возможно сделать это с помощью строки. Другой вариант: я могу предоставить изображение во временном файле .bak. А затем сделайте INSERT INTO. Но с этим решением, которое я прочитал, можно только вставить полную строку, а не только столбец. Или я могу вставить только столбец со вставкой?

Как обновить или вставить один столбец изображения в таблицу? Спасибо заранее.

ответ

1

Попробуйте использовать преобразование в VARBINARY:

UPDATE cSc_Role 
SET RoleSettings = convert(VARBINARY(MAX),'0x343240000000000E637CA2A430500') 
WHERE Naming = 'User X' 
+0

Это работает (вы просто пропустили e в конвертере). И он преобразует данную строку в шестнадцатеричную. Итак, я хочу скопировать в RoleSettings это содержимое из другой базы данных, где я скопировал содержимое в текстовый файл. Итак, сначала мне нужно преобразовать этот контент в десятичный, а затем преобразовать его с обновлением в hex? – user1673665

+0

@ user1673665 Я не уверен, но, возможно, вы правы. Попробуйте, тогда вы узнаете :) – Parado

0

Используйте шестигранный литерал, x'34 ....»

UPDATE cSc_Role 
SET RoleSettings = x'343240000000000E637CA2A430500' 
WHERE Naming = 'User X' 
+0

Благодарим вас за ответ. Но когда я пытаюсь это сделать, я получаю неправильный синтаксис ошибки. Я положил букву x перед «и удалил 0x в начале. – user1673665

+0

Какие dbms вы используете? (Мой ответ совместим с ANSI SQL ...) – jarlh

+0

MS SQL Server Management Studio 2008 R2 – user1673665

1

Если прежде всего решение не работает, то попробуйте обновить как показано ниже, удалив '' в следующем,

UPDATE cSc_Role 
SET RoleSettings = 0x343240000000000E637CA2A430500 
WHERE Naming = 'User X' 

Кроме того, избегать использования этих типов данных (ntext, text и image) в новых разработках и планировать изменение приложений, которые в настоящее время их используют. Использовать nvarchar (max), varchar (max) и varbinary (max) вместо этого.

0

У меня была такая же проблема в проекте, вам нужно предоставить двоичные данные как шестнадцатеричное значение, а не строку. Этот инструмент может сделать вас UPDATE или INSERT, что вам нужно

Binary-file-to-sql-hexstring

Это спасло меня много человеко-часов.