Verwenden der OPTION BINARY BASE64

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Wenn die Option BINARY BASE64 in der Abfrage angegeben ist, werden die Binärdaten im Base64-codierten Format zurückgegeben.

Wenn die OPTION BINARY BASE64 in der Abfrage nicht angegeben ist, unterstützt der AUTO-Modus standardmäßig die URL-Codierung von Binärdaten. Es wird ein Verweis auf eine relative URL-Adresse des virtuellen Stamms der Datenbank zurückgegeben. Dieser Verweis bezieht sich auf die Datenbank in der die Abfrage ausgeführt wurde. Der zurückgegebene Verweis kann in nachfolgenden Vorgängen für den Zugriff auf die eigentlichen Binärdaten verwendet werden. Dieser Zugriff wird mithilfe der SQLXML ISAPI-Abfrage dbobject erreicht. Die Abfrage muss genügend Informationen zum Identifizieren des Images angeben. Zu diesen Informationen können die Spalten des Primärschlüssels zählen.

Spaltenalias

Verwenden Sie keinen Alias für eine binäre Spalte, wenn Sie eine Ansicht abfragen und den FOR XML-AUTO-Modus verwenden. Wenn Sie einen Alias verwenden, wird der Alias in der URL-Codierung der Binärdaten zurückgegeben. In nachfolgenden Vorgängen ist der Alias bedeutungslos. Der bedeutungslose Alias und die URL-Codierung können nicht zum Abrufen des Bilds verwendet werden.

Umwandlung in ein BLOB

In einer SELECT-Abfrage wird jede beliebige Spalte durch Umwandlung in ein BLOB (Binary Large Object) zu einer temporären Entität. Als temporäre Entität verliert das BLOB seinen zugeordneten Tabellennamen und Spaltennamen. Diese Umwandlung bewirkt, dass AUTO-Modus-Abfragen einen Fehler generieren, da das System nicht weiß, wo dieser Wert in der XML-Hierarchie abgelegt werden soll.

Betrachten Sie dazu beispielsweise die folgende Tabelle mit ihrer einen Zeile.

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

Die folgende Abfrage führt aufgrund der Umwandlung in ein BLOB (Binary Large Object) zu einem Fehler:

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

Die Lösung besteht im Hinzufügen der Option BINARY BASE64 zur FOR XML-Klausel. Wenn Sie die Umwandlung entfernen, liefert die Abfrage gute Ergebnisse.

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

Erwarten Sie Folgendes gutes Ergebnis:

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

Siehe auch

Verwenden des AUTO-Modus mit FOR XML