본문 바로가기

연구개발/DBA

FOR XML

728x90
반응형
FOR XML RAW | AUTO | EXPLICIT [, XMLDATA] [, ELEMENTS] [, BINARY BASE64]

FOR XML : SQL 서버로부터 XML 데이터 결과 행 반환


RAW는 컬럼 값을 속성으로 반환하고 일반적인 행 요소로 각 행을 둘러싼다.
<row CustomerId="ALFKI" CompanyName="Alfreds Futterkiste" />
<row CustomerId="ANATR" CompanyName="Ana Trujillo Emparedados y helados" />
<row CustomerId="ANTON" CompanyName="Antonio Moreno Taquería" />
<row CustomerId="AROUT" CompanyName="Around the Horn" />

* RAW 조인 시 속성들 간에 단순한 1대 1 변환이 발생
SELECT Customers.CustomerID, CompanyName, OrderId
FROM Customers JOIN Orders
ON (Customers.CustomerId = Orders.CustomerId)
FOR XML RAW

<row CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" OrderId="10643" />
<row CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" OrderId="10692" />
<row CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" OrderId="10702" />
<row CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" OrderId="10835" />
<row CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" OrderId="10952" />
<row CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" OrderId="11011" />
<row CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" OrderId="10308" />
<row CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" OrderId="10625" />
<row CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" OrderId="10759" />
<row CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" OrderId="10926" />


AUTO는 컬럼 값을 속성으로 반환하고 컬럼이 있는 테이블의 이름을 따라 명명된 요소로 각 행을 둘러싼다.
<Customers CustomerId="ALFKI" CompanyName="Alfreds Futterkiste" />
<Customers CustomerId="ANATR" CompanyName="Ana Trujillo Emparedados y helados" />
<Customers CustomerId="ANTON" CompanyName="Antonio Moreno Taquería" />
<Customers CustomerId="AROUT" CompanyName="Around the Horn" />

* AUTO로 조인 시 속성은 요소의 특징을 지정. 반복되는 속성 분리
SELECT Customers.CustomerID, CompanyName, OrderId
FROM Customers JOIN Orders
ON (Customers.CustomerId = Orders.CustomerId)
FOR XML AUTO

<Customers CustomerID="ALFKI" CompanyName="Alfreds Futterkiste">
  <Orders OrderId="10643" />
  <Orders OrderId="10692" />
  <Orders OrderId="10702" />
  <Orders OrderId="10835" />
  <Orders OrderId="10952" />
  <Orders OrderId="11011" />
</Customers>
<Customers CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados">
  <Orders OrderId="10308" />
  <Orders OrderId="10625" />
  <Orders OrderId="10759" />
  <Orders OrderId="10926" />
</Customers>

EXPLICIT는 쿼리가 반환하는 XML의 형식을 사용자가 완전하게 제어하도록 한다.
FOR XML EXPLICIT에는 첫 번째 열에 XML 태그 ID를 나타내는 양의 정수가 있어야 합니다.
FOR XML EXPLICIT에는 두 번째 열에 XML 부모 태그 ID를 나타내는 음수가 아닌 정수나 NULL이 있어야 합니다.

SELECT 1 AS Tag,
    NULL AS Parent
    CustomerId AS [Customers!1!CustomerId], -- 아래 규칙 확인
    CompanyName AS [Customers!1], -- 아래 규칙 확인
    ContactName AS [Customers!1!ContactName!element] -- 아래 규칙 확인
FROM Customers
FOR XML EXPLICIT

<Customers CustomerId="ALFKI">Alfreds Futterkiste<ContactName>Maria Anders</ContactName></Customers>
<Customers CustomerId="ANATR">Ana Trujillo Emparedados y helados<ContactName>Ana Trujillo</ContactName></Customers>
<Customers CustomerId="ANTON">Antonio Moreno Taquería<ContactName>Antonio Moreno</ContactName></Customers>
<Customers CustomerId="AROUT">Around the Horn<ContactName>Thomas Hardy</ContactName></Customers>

XMLDATA는 가져오는 문서에 대하여 XDR 스키마가 반환되도록 한다.

ELEMENTS는 XML AUTO 데이터에 있는 컬럼이 속성이 아닌 요소로서 반환되도록 한다.
SELECT CustomerID, CompanyName
FROM Customers
FOR XML AUTO, ELEMENTS

<Customers>
  <CustomerID>ALFKI</CustomerID>
  <CompanyName>Alfreds Futterkiste</CompanyName>
</Customers>
<Customers>
  <CustomerID>ANATR</CustomerID>
  <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
</Customers>

BINARY BASE64는 BASE64 인코딩을 사용하여 이진 데이터가 반환되도록 한다.






728x90
반응형