Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Если в запросе задан аргумент 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==" />