Usar la opción BINARY BASE64
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
Si en la consulta se especifica la opción BINARY BASE64, los datos binarios se devuelven en formato de codificación en base64.
De manera predeterminada, si no se especifica en la consulta la opción BINARY BASE64, el modo AUTO admite la codificación URL de datos binarios. Se devuelve una referencia a una URL relativa a la raíz virtual de la base de datos. Esta referencia está en la base de datos donde se ha ejecutado la consulta. La referencia devuelta se puede utilizar para obtener acceso a los datos binarios reales en operaciones posteriores. Este acceso se logra mediante la consulta dbobject
SQLXML ISAPI. La consulta debe proporcionar suficiente información para identificar la imagen. Dicha información podría incluir las columnas de la clave principal.
Alias de columna
No utilice un alias para una columna binaria al consultar una vista y usar el modo FOR XML AUTO. Si se utiliza un alias, este se devuelve en la codificación de la dirección URL de los datos binarios. En operaciones posteriores, el alias no tiene ningún significado. El alias sin significado y la codificación de dirección URL no se pueden utilizar para recuperar la imagen.
Conversión a un BLOB
En una consulta SELECT, la conversión de cualquier columna en un objeto binario grande (BLOB) convierte la columna en una entidad temporal. Como es temporal, el BLOB pierde el nombre de la tabla y de la columna asociados. Esta conversión hace que las consultas en modo AUTO generen un error, ya que el sistema no sabe dónde colocar este valor en la jerarquía XML.
Por ejemplo, considere la siguiente tabla con una fila.
CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);
La consulta siguiente produce un error debido a la conversión en un objeto binario grande (BLOB):
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;
La solución consiste en agregar la opción BINARY BASE64 a la cláusula FOR XML. Si se quita la conversión, la consulta produce buenos resultados.
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;
Espere el siguiente resultado correcto:
<MyTable Col1="1" Col2="Bw==" />