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

Применимо к:База данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure

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

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

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

Не используйте псевдоним для двоичного столбца при запросе представления и использовании режима 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