De optie BINARY BASE64 gebruiken
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Als de optie BINARY BASE64 is opgegeven in de query, worden de binaire gegevens geretourneerd in base64-codering.
Als de optie BINARY BASE64 niet is opgegeven in de query, ondersteunt de AUTO-modus standaard URL-codering van binaire gegevens. Er wordt een verwijzing gegeven naar een relatieve URL van de virtuele hoofdmap van de database. Deze verwijzing is naar de database waarop de query is uitgevoerd. De geretourneerde verwijzing kan worden gebruikt voor toegang tot de werkelijke binaire gegevens in volgende bewerkingen. Deze toegang wordt bereikt met behulp van de SQLXML ISAPI-dbobject
-query. De query moet voldoende informatie bevatten om de afbeelding te identificeren. Dergelijke informatie kan de kolommen van de primaire sleutel bevatten.
Kolomalias
Gebruik geen alias voor een binaire kolom wanneer u een query uitvoert op een weergave en de MODUS FOR XML AUTO gebruikt. Als u een alias gebruikt, wordt de alias geretourneerd in de URL-codering van de binaire gegevens. In volgende bewerkingen is de alias betekenisloos. De betekenisloze alias en de URL-codering kunnen niet worden gebruikt om de afbeelding op te halen.
Casten naar een BLOB
In een SELECT-query maakt het casten van een kolom naar een binair groot object (BLOB) de kolom een tijdelijke entiteit. Omdat de BLOB tijdelijk is, verliest deze de bijbehorende tabelnaam en kolomnaam. Deze cast zorgt ervoor dat query's in de AUTO-modus een fout genereren, omdat het systeem niet weet waar deze waarde in de XML-hiërarchie moet worden geplaatst.
Bekijk bijvoorbeeld de volgende tabel met één rij.
CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);
De volgende query produceert een fout, die wordt veroorzaakt door het casten naar een binair groot object (BLOB):
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;
De oplossing is het toevoegen van de binaire BASE64-optie aan de FOR XML-component. Als u de cast verwijdert, levert de query goede resultaten op.
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;
Verwacht het volgende goede resultaat:
<MyTable Col1="1" Col2="Bw==" />