Поделиться через


Использование параметра BINARY BASE64

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Если в запросе задан аргумент BINARY BASE64, двоичные данные возвращаются в формате кодирования base64.

Если параметр BINARY BASE64 не указан в запросе, по умолчанию режим AUTO поддерживает кодировку URL-адресов двоичных данных. Возвращается ссылка на относительный URL-адрес виртуального корня базы данных. Эта ссылка указывает на базу данных, в которой был выполнен запрос. Возвращаемую ссылку можно использовать для доступа к действительным двоичным данным в последующих операциях. Этот доступ достигается с помощью запроса ISAPI dbobject SQLXML. Для идентификации изображения запрос должен предоставить достаточно данных. Такие сведения могут включать столбцы первичного ключа.

Псевдоним столбца

Не используйте псевдоним для двоичного столбца при запросе представления и использовании режима FOR XML AUTO. Если используется псевдоним, он возвращается в кодировке URL-адреса двоичных данных. В последующих операциях псевдоним не имеет смысла. Бессмысленный псевдоним и кодировка URL-адреса не могут использоваться для извлечения изображения.

Приведение к большому объекту данных

В запросе SELECT приведение любого столбца к большому двоичному объекту (BLOB) делает столбец временной сущностью. Будучи временным, BLOB-объект теряет связанное имя таблицы и имя столбца. Преобразование типов приводит к тому, что запросы в режиме AUTO вызывают ошибку, поскольку система не знает, где поместить это значение в XML-иерархии.

Например, рассмотрим следующую таблицу с одной строкой.

CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);

Следующий запрос вызовет ошибку, вызванную преобразованием в двоичный большой объект (BLOB):

SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;

Решение этой проблемы заключается в добавлении параметра BINARY BASE64 к предложению FOR XML. Если убрать приведение, запрос вернет хороший результат.

SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;

Ожидается следующий положительный результат:

<MyTable Col1="1" Col2="Bw==" />

См. также

Используйте режим AUTO с FOR XML