반응형
Ant_U
DBA 개미
Ant_U
전체 방문자
오늘
어제
  • 분류 전체보기 (262)
    • AWS (3)
    • C# (1)
    • SQL (236)
      • MYSQL (186)
      • MSSQL (50)
    • 자격증 (20)
      • SQLD (12)
      • SQLP (8)

인기 글

최근 글

250x250
hELLO · Designed By 정상우.
Ant_U

DBA 개미

SQL/MSSQL

[MSSQL] FOR XML 사용 방법

2023. 7. 13. 11:34
728x90
반응형

`FOR XML` 절은 SQL Server에서 XML 형식으로 데이터를 쿼리 결과로 반환하는 데 사용되는 기능입니다. 

이를 통해 쿼리 결과를 XML 형식으로 변환하고, XML을 생성, 조작, 처리할 수 있습니다.

아래 예제를 통해 `FOR XML`에 대해 자세히 설명하겠습니다.

예시를 위해 다음과 같은 테이블 구조를 가진 `Customers` 테이블을 사용하겠습니다.

plaintext
Customers Table:
+----+---------+--------+----------+
| ID | Name    | City   | Country  |
+----+---------+--------+----------+
| 1  | John    | London | UK       |
| 2  | Emily   | Paris  | France   |
| 3  | Michael | Berlin | Germany  |
+----+---------+--------+----------+




1. 기본적인 `FOR XML` 사용:

SELECT ID, Name, City, Country
FROM Customers
FOR XML AUTO

위 쿼리의 결과는 다음과 같습니다:

<Customers>
  <Customers ID="1" Name="John" City="London" Country="UK" />
  <Customers ID="2" Name="Emily" City="Paris" Country="France" />
  <Customers ID="3" Name="Michael" City="Berlin" Country="Germany" />
</Customers>




2. XML 형식의 엘리먼트 이름 변경:

SELECT ID AS 'CustomerID', Name AS 'CustomerName', City, Country
FROM Customers
FOR XML AUTO

위 쿼리의 결과는 다음과 같습니다:

<Customers>
  <Customers CustomerID="1" CustomerName="John" City="London" Country="UK" />
  <Customers CustomerID="2" CustomerName="Emily" City="Paris" Country="France" />
  <Customers CustomerID="3" CustomerName="Michael" City="Berlin" Country="Germany" />
</Customers>



3. 부모-자식 구조의 XML 생성: 

SELECT
    City AS '@City',
    (
        SELECT ID, Name, Country
        FROM Customers
        WHERE City = C.City
        FOR XML AUTO, TYPE
    )
FROM Customers AS C
GROUP BY City
FOR XML PATH('CustomersByCity')

위 쿼리의 결과는 다음과 같습니다:

<CustomersByCity City="London">
  <Customers ID="1" Name="John" Country="UK" />
</CustomersByCity>
<CustomersByCity City="Paris">
  <Customers ID="2" Name="Emily" Country="France" />
</CustomersByCity>
<CustomersByCity City="Berlin">
  <Customers ID="3" Name="Michael" Country="Germany" />
</CustomersByCity>




4. 1500 자 이상의 결과 처리:

SQL Server에서 XML은 최대 크기인 2GB까지 저장할 수 있습니다. 

하지만 `FOR XML` 결과가 1500 자 이상이라면 결과가 자동으로 줄여질 수 있습니다. 

이를 방지하려면 `FOR XML` 절을 사용하여 결과를 명시적으로 타입으로 지정해야 합니다.

DECLARE @xml XML
SET @xml = (
    SELECT ID, Name, City, Country
    FROM Customers
    FOR XML AUTO, TYPE
)
SELECT @xml AS Result



위 쿼리에서 `@xml` 변수는 XML 형식으로 쿼리 결과를 저장합니다. 

`FOR XML AUTO, TYPE`을 사용하여 결과를 명시적으로 XML 타입으로 저장하고, 이를 변수로 선택한 후 출력합니다.

이렇게 하면 XML 결과가 1500 자 이상일 때 잘림 없이 전체 결과를 가져올 수 있습니다.

위의 예시를 통해 `FOR XML`의 기본 사용법 및 몇 가지 예시를 확인할 수 있었습니다. 

XML 결과를 원하는 방식으로 생성하고 처리하는 데 사용될 수 있습니다.

728x90
반응형

'SQL > MSSQL' 카테고리의 다른 글

[MSSQL] @@DBTS 사용 방법 및 예시  (0) 2023.07.26
[MSSQL] @@DATEFIRST 사용 방법 및 예시  (0) 2023.07.26
[MSSQL] 열을 행으로 바꾸는 방법 / UNPIVOT, CROSS APLLY  (0) 2023.07.21
[MSSQL] 행 합치는 법(STRING_AGG, FOR XML PATH, STUFF)  (0) 2023.07.13
[MSSQL] @@ROWCOUNT 사용 방법 및 예시  (0) 2023.07.06
[MSSQL] STRING_SPLIT 문자열 분리 사용 방법  (1) 2023.05.24
[MSSQL] STRING_AGG 함수 사용 방법 및 예시  (0) 2023.04.03
[MSSQL] Coalesce 함수 Null이 아닌 값 반환 사용 방법  (0) 2023.03.20
    'SQL/MSSQL' 카테고리의 다른 글
    • [MSSQL] 열을 행으로 바꾸는 방법 / UNPIVOT, CROSS APLLY
    • [MSSQL] 행 합치는 법(STRING_AGG, FOR XML PATH, STUFF)
    • [MSSQL] @@ROWCOUNT 사용 방법 및 예시
    • [MSSQL] STRING_SPLIT 문자열 분리 사용 방법
    Ant_U
    Ant_U

    티스토리툴바