Partager via


Utiliser l’option BINARY BASE64

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Si l'option BINARY BASE64 est spécifiée dans la requête, les données binaires sont renvoyées dans un format encodé en base 64.

Si l’option BINARY BASE64 n’est pas spécifiée dans la requête, le mode AUTO prend en charge l’encodage d’URL des données binaires par défaut. Une référence à une URL relative vers la racine virtuelle de la base de données est retournée. Cette référence concerne la base de données où la requête a été exécutée. La référence retournée peut être utilisée pour accéder aux données binaires réelles lors les opérations ultérieures. Cet accès est obtenu à l’aide de la requête ISAPI dbobject SQLXML. La requête doit fournir suffisamment d’informations pour identifier l’image. Ces informations peuvent inclure les colonnes de la clé primaire.

Alias de colonne

N’utilisez pas d’alias pour une colonne binaire lorsque vous interrogez une vue et utilisez le mode AUTO FOR XML. Si vous utilisez un alias, l’alias est retourné dans l’encodage URL des données binaires. Dans les opérations suivantes, l’alias ne signifie rien. L’alias sans signification et l’encodage d’URL ne peuvent pas être utilisés pour récupérer l’image.

Cast en objet blob

Dans une requête SELECT, le cast d’une colonne en objet blob transforme la colonne en une entité temporaire. Étant temporaire, l’objet blob perd son nom de table et son nom de colonne associés. Ce cast entraîne la génération d’une erreur par les requêtes en mode AUTO, car le système ne sait pas où placer cette valeur dans la hiérarchie XML.

Par exemple, considérons la table suivante avec sa seule ligne.

CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);

La requête suivante produit une erreur en raison du cast en objet blob :

SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;

La solution consiste à ajouter l'option BINARY BASE64 dans la clause FOR XML. Si vous supprimez le cast, la requête produit les bons résultats.

SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;

Voici le bon résultat attendu :

<MyTable Col1="1" Col2="Bw==" />

Voir aussi

Utiliser le mode AUTO avec FOR XML