次の方法で共有


BINARY BASE64 オプションを使用する

クエリで BINARY BASE64 オプションが指定されている場合、バイナリ データは base64 エンコード形式で返されます。 既定では、BINARY BASE64 オプションが指定されていない場合、AUTO モードではバイナリ データの URL エンコードがサポートされます。 つまり、バイナリ データではなく、クエリが実行されたデータベースの仮想ルートへの相対 URL への参照が返されます。 この参照は、SQLXML ISAPI dbobject クエリを使用して、後続の操作で実際のバイナリ データにアクセスするために使用できます。 このクエリでは、画像を識別するのに十分な情報 (主キー列など) を提供する必要があります。

クエリを指定する際に、ビューのバイナリ列にエイリアスが使用されている場合、エイリアスはバイナリ データの URL エンコードで返されます。 後続の操作では、エイリアスは意味がなく、URL エンコードを使用してイメージを取得することはできません。 したがって、FOR XML AUTO モードを使用してビューにクエリを実行する場合は、エイリアスを使用しないでください。

たとえば、SELECT クエリでは、任意の列をバイナリ ラージ オブジェクト (BLOB) にキャストすると、関連付けられているテーブル名と列名が失われるという点で一時的なエンティティになります。 これにより、この値を XML 階層に配置する場所がわからないため、AUTO モードクエリでエラーが生成されます。 例えば次が挙げられます。

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

このクエリでは、バイナリ ラージ オブジェクト (BLOB) へのキャストが原因でエラーが発生します。

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

解決策は、BINARY BASE64 オプションを FOR XML 句に追加することです。 型変換を取り除くと、クエリから期待どおりの結果が生成されます。

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

結果を次に示します。

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

こちらもご覧ください

FOR XML で AUTO モードを使用する