Обновить таблицу, добавив VARBINARY данные - PullRequest
16 голосов
/ 26 января 2012

Когда я запускаю SQL-запрос, я получаю что-то вроде этого:

Запрещено неявное преобразование из типа данных varchar в тип данных. varbinary .... Используйте функцию CONVERT для выполнения этого запроса. (строгость 16) `

Данные, которые я хочу вставить, выглядят как

'00001200000000000010000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...FFF'

Как сделать этот запрос?

Запрос выглядит так:

UPDATE <table> SET VARBINARY_DATA = '00001200000000000010000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF....' WHERE ID = 12

1 Ответ

45 голосов
/ 26 января 2012

Начиная с SQL Server 2005 и далее, CONVERT делает то, что вам нужно:

CONVERT(varbinary(2000), '00001340132401324...', 2)

Стили для преобразования в / из двоичного файла:

  • 0: исходные данные, кодовые точки ascii становятсядвоичные байты, кодовые точки UTF-16 становятся двумя байтами каждая.
  • 1: шестнадцатеричный формат с префиксом «0x»
  • 2: шестнадцатеричный формат, без префикса «0x»

Для преобразования символов в двоичный формат 0:

  • char или varchar данные (например, ASCII, ISO-8859-1) становятся двоичными байтами.Для односимвольных кодировок это означает, что по одному байту на символ.
  • nchar или nvarchar данные (т. Е. UTF-16) становятся двумя байтами каждый в формате с прямым порядком байтов, поэтому N'ABC' становится 0x410042004300

Для преобразования шестнадцатеричного числа в двоичное в форматах 1 и 2:

  • Каждые две входные шестнадцатеричные цифры становятся одним байтом
  • Если ввод недопустим в шестнадцатеричном видевозникает ошибка
  • Пробелы и знаки препинания не допускаются

См. MSDN:

Если вам нужноUTF-8, смотрите мой ответ здесь для UDF, который преобразует текст в UTF-8:

...