Вставить шестнадцатеричное значение строки в поле изображения сервера sql добавляет 0 - PullRequest
12 голосов
/ 17 апреля 2010

Есть поле изображения и хотите вставить в него из шестнадцатеричной строки:

insert into imageTable(imageField) 
values(convert(image, 0x3C3F78...))

однако при запуске выберите значение, возвращаемое с дополнительным 0, как 0x03C3F78 ...

Этот дополнительный 0 вызывает проблему в другом приложении, я не хочу его.

Как остановить добавление дополнительных 0?

Схема:

CREATE TABLE [dbo].[templates](
    [templateId] [int] IDENTITY(1,1) NOT NULL,
    [templateName] [nvarchar](50) NOT NULL,
    [templateBody] [image] NOT NULL,
    [templateType] [int] NULL)

и запрос:

insert into templates(templateName, templateBody, templateType) 
values('I love stackoverflow', convert(image, 0x3C3F786D6C2076657273696F6E3D.......), 2)

Фактическая шестнадцатеричная строка достаточно велика для размещения здесь.

Ответы [ 2 ]

11 голосов
/ 16 марта 2011

У меня только что была похожая проблема, и я виню себя.

Возможно, вы копируете только часть нужных вам данных. В моем случае я добавил '0' к концу BLOB-объекта.

Причиной этого может быть копирование значения из SQL Management Studio в буфер обмена.


вставить в imageTable (imageField) значения (0x3C3F78 ... A)

Выберите возвращено: 0x03C3F78 ...


вставить в imageTable (imageField) значения (0x3C3F78 ... A 0 )

Выберите возвращено: 0x3C3F78 ...


Надеюсь, это поможет.

С наилучшими пожеланиями.

1 голос
/ 17 апреля 2010

Это верно для 0x0: каждая пара цифр составляет один байт, поэтому в 0x00 хранится значение

Когда я запускаю SELECT convert(varbinary(max), 0x55), я получаю 0x55 на SQL Server 2008. SELECT convert(varbinary(max), 85) дает мне 0x00000055, чтоправильно 85 - это 32-битное целое число

Какой тип данных вы приводите в varbinary?

Редактировать: Я все еще не могу воспроизвести с использованием изображения, а не varbinary

Хотя некоторые вопросы:

  • это обновленная база данных?Каков уровень совместимости?
  • зачем использовать image: вместо этого используйте varbinary (max)
  • что происходит, когда вы меняете все на varbinary?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...