Usar a opção BINARY BASE64
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
A opção BINARY BASE64 é especificada na consulta. Os dados binários são retornados no formato de codificação na base64.
Se a opção BINARY BASE64 não for especificada na consulta, por padrão, o modo AUTO oferecerá suporte à codificação de URL de dados binários. Uma referência a uma URL relativa para a raiz virtual do banco de dados é retornada. Essa referência é para o banco de dados em que a consulta foi executada. A referência retornada pode ser usada para acessar os dados binários reais em operações subsequentes. Esse acesso é obtido ao usar a consulta dbobject
do SQLXML ISAPI. A consulta deve fornecer informações suficientes para identificar a imagem. Essas informações podem incluir as colunas da chave primária.
Alias de coluna
Não use um alias para uma coluna binária ao consultar uma visualização e usar o modo FOR XML AUTO. Se você usar um alias, ele será retornado na codificação de URL dos dados binários. Em operações subsequentes, o alias não faz sentido. O alias sem sentido e a codificação de URL não podem ser usados para recuperar a imagem.
Converter em um BLOB
Em uma consulta SELECT, a conversão de qualquer coluna em um blob (objeto binário grande) torna a coluna uma entidade temporária. Sendo temporário, o blob perde seu nome de tabela e nome de coluna associados. Essa conversão faz com que as consultas no modo AUTO gerem um erro, porque o sistema não sabe onde colocar esse valor na hierarquia XML.
Por exemplo, considere a tabela a seguir com sua única linha.
CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);
A consulta a seguir produz um erro, causado pela conversão em um blob (objeto binário grande):
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;
A solução é adicionar a opção BINARY BASE64 à cláusula FOR XML. Se você remover a conversão, a consulta produzirá bons resultados.
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;
Espere o seguinte bom resultado:
<MyTable Col1="1" Col2="Bw==" />