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


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

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

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

Например, в запросе SELECT приведение любого столбца к двоичному большому объекту (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