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

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру 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 Mode с FOR XML