DB에 있는 자료를 XML 문서로 만들어야 할 일이 있을 때, 지금까지는 RecordSet을 만들어서 반복문을 돌리면서 만들어 냈다면, 아래 방법을 쓰면 좀 더 간단하게 만들 수 있을 것 같다.
-------------------------------------------------------------
출처 : MSSQL 2000 도움말
RAW 모드 사용
RAW 모드는 쿼리 결과 집합의 각 행을 일반 식별자 row가 포함된 XML 요소로 변환합니다. NULL이 아닌 각 열 값은 특성 이름이 열 이름과 동일한 XML 요소의 특성에 매핑됩니다.
이진 데이터를 base64 인코딩 형식으로 반환하기 위해 쿼리에서 BINARY BASE64 옵션을 지정합니다. RAW 모드에서 BINARY BASE64 옵션을 지정하지 않고 이진 데이터를 검색하면 오류가 발생합니다.
XML-Data 스키마를 요청하면 이름 공간으로 선언된 스키마가 데이터 시작 부분에 나타납니다. 결국 모든 최상위 요소에 대해 스키마 이름 공간 참조가 반복됩니다.
예제
다음 예제의 쿼리는 SQL 쿼리 분석기를 사용하여 실행할 수 있습니다. HTTP를 사용하여 쿼리를 실행하려면 HTTP를 사용하여 SQL Server 액세스를 참조하십시오.
A. RAW 모드를 사용하여 고객 및 주문 정보 검색
다음 쿼리는 고객과 주문 정보를 반환합니다. RAW 모드는 FOR XML 절에서 지정되었습니다.
SELECT Customers.CustomerID, Orders.OrderID, Orders.OrderDate
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerID
FOR XML RAW
다음은 결과의 일부입니다.
<row CustomerID="ALFKI" OrderID="10643" OrderDate="1997-08-25T00:00:00"/>
<row CustomerID="ANATR" OrderID="10308" OrderDate="1996-09-18T00:00:00"/>
<row CustomerID="ANATR" OrderID="10625" OrderDate="1997-08-08T00:00:00"/>
<row CustomerID="AROUT" OrderID="10355" OrderDate="1996-11-15T00:00:00"/>
해당 고객에 대한 주문이 있는지 여부에 관계 없이 결과 집합에 모든 고객을 반환하기 위해 외부 조인을 사용하여 동일한 쿼리를 지정할 수 있습니다.
SELECT C.CustomerID, O.OrderID, O.OrderDate
FROM Customers C LEFT OUTER JOIN Orders O on C.CustomerID = O.CustomerID
ORDER BY C.CustomerID
FOR XML RAW
다음은 결과의 일부입니다.
<row CustomerID="BONAP" OrderID="11076" OrderDate="1998-05-06T00:00:00"/>
<row CustomerID="FISSA"/>
<row CustomerID="PARIS"/>
<row CustomerID="RICSU" OrderID="11075" OrderDate="1998-05-06T00:00:00"/>
B. XMLDATA 옵션을 지정하여 XML-Data 스키마 요청
이 쿼리는 문서 구조를 설명하는 XMLDATA 스키마를 반환합니다.
SELECT TOP 2 Customers.CustomerID, Orders.OrderID, Orders.OrderDate
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerID
FOR XML RAW , XMLDATA
다음은 결과의 일부입니다.
<Schema name="Schema3" xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="row" content="empty" model="closed">
<AttributeType name="CustomerID" dt:type="string"/>
<AttributeType name="OrderID" dt:type="i4"/>
<AttributeType name="OrderDate" dt:type="dateTime"/>
<attribute type="CustomerID"/><attribute type="OrderID"/>
<attribute type="OrderDate"/>
</ElementType>
</Schema>
<row xmlns="x-schema:#Schema3" CustomerID="ALFKI" OrderID="10643"
OrderDate="1997-08-25T00:00:00"/>
<row xmlns="x-schema:#Schema3" CustomerID="ALFKI" OrderID="10692"
OrderDate="1997-10-03T00:00:00"/>
참고 <Schema>는 이름 공간으로 선언되었습니다. 서로 다른 FOR XML 쿼리에서 여러 XML-Data 스키마를 요청할 때는 이름 공간 충돌을 피하기 위해 쿼리가 실행될 때마다 이름 공간 식별자(이 예제에서는 Schema3)가 변경됩니다. 이름 공간 식별자는 Schema와 정수로 이루어집니다.
C. 이진 데이터 검색
이 쿼리는 Employees 테이블로부터 직원 사진을 반환합니다. Photo는 Employees 테이블의 image 열입니다. 이진 데이터를 base64 인코딩 형식으로 반환하기 위해 쿼리에서 BINARY BASE64 옵션을 지정합니다.
SELECT TOP 1 Photo
FROM Employees
WHERE EmployeeID=1
FOR XML RAW, BINARY BASE64
다음은 결과입니다.
<row Photo="base64
형식이진
데이터
"/>
D. URL을 직접 지정하여 이진 데이터 검색
RAW 모드는 이진 데이터를 URL로 주소 지정하는 것을 지원하지 않으므로, 이 예제에서는 DBOBJECT/TABLE[@PK1="v1"]/@COLUMN 구문을 사용하여 URL을 직접 만듭니다. 다른 후속 작업에서 사용할 수 있는 이미지 데이터에 대한 참조가 반환됩니다.
SELECT TOP 1 EmployeeID,
'dbobject/Employees[@EmployeeID='+CAST(EmployeeID as
nvarchar(4000))+']/@Photo' Photo
FROM Employees
FOR XML RAW
다음은 결과입니다.
<row EmployeeID="3"
Photo="dbobject/Employees[@EmployeeID3]/@Photo"/>
'쓸만한 주저리' 카테고리의 다른 글
자바스크립트로 만든 한글 입력기 가상 자판 (0) | 2009.05.27 |
---|---|
div, textarea에서 button 눌러서 scroll 조종 (0) | 2009.05.22 |
asp에서 file 이름 바꾸기 (0) | 2009.04.30 |
자바스크립트로 Shooting Game 만들기 (0) | 2009.04.02 |
자바스크립트 바둑판 (0) | 2009.04.01 |