쿼리에서 BINARY BASE64 옵션을 지정하면 이진 데이터가 base64 인코딩 형식으로 반환됩니다. 기본적으로 BINARY BASE64 옵션을 지정하지 않으면 AUTO 모드는 이진 데이터의 URL 인코딩을 지원합니다. 즉, 이진 데이터 대신 쿼리가 실행된 데이터베이스의 가상 루트에 대한 상대 URL에 대한 참조가 반환됩니다. 이 참조는 SQLXML ISAPI dbobject 쿼리를 사용하여 후속 작업에서 실제 이진 데이터에 액세스하는 데 사용할 수 있습니다. 쿼리는 이미지를 식별하기 위해 기본 키 열과 같은 충분한 정보를 제공해야 합니다.
쿼리를 지정할 때 뷰의 이진 열에 별칭이 사용되는 경우 별칭은 이진 데이터의 URL 인코딩에 반환됩니다. 후속 작업에서 별칭은 의미가 없으며 URL 인코딩을 사용하여 이미지를 검색할 수 없습니다. 따라서 FOR XML AUTO 모드를 사용하여 뷰를 쿼리할 때 별칭을 사용하지 마세요.
예를 들어 SELECT 쿼리에서 모든 열을 BLOB(Binary Large Object)로 캐스팅하면 연결된 테이블 이름과 열 이름이 손실된다는 측면에서 임시 엔터티가 됩니다. 이로 인해 AUTO 모드 쿼리는 XML 계층 구조에 이 값을 배치할 위치를 모르기 때문에 오류를 생성합니다. 다음은 그 예입니다.
CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);
이 쿼리는 BLOB(Binary Large Object)로 캐스팅되므로 오류를 생성합니다.
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;
이 솔루션은 FOR XML 절에 BINARY BASE64 옵션을 추가합니다. 캐스팅을 제거하면 쿼리가 예상대로 결과를 생성합니다.
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;
다음은 결과입니다.
<MyTable Col1="1" Col2="Bw==" />