使用 BINARY BASE64 选项

如果在查询中指定 BINARY BASE64 选项,则以 base64 编码格式返回二进制数据。 默认情况下,如果未指定 BINARY BASE64 选项,AUTO 模式支持二进制数据的 URL 编码。 也就是说,有关执行查询的数据库虚拟根目录的相对 URL 而非二进制数据的引用会被返回。 此引用可用于在后续操作中使用 SQLXML ISAPI dbobject 查询访问实际的二进制数据。 查询必须提供足够的信息(如主键列)来标识图像。

在指定查询时,如果别名用于视图的二进制列,则别名将在二进制数据的 URL 编码中返回。 在后续作中,别名毫无意义,URL 编码不能用于检索图像。 因此,在使用 FOR XML AUTO 模式查询视图时不要使用别名。

例如,在 SELECT 查询中,将任何列强制转换为二进制大型对象(BLOB),使其成为一个临时实体,因为它会丢失其关联的表名称和列名。 这会导致 AUTO 模式查询生成错误,因为它不知道在 XML 层次结构中放置此值的位置。 例如:

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==" />  

另请参阅

将 AUTO 模式与 FOR XML 配合使用