>데이터 베이스 >MySQL 튜토리얼 >FOR XML PATH를 사용하여 SQL Server에서 쉼표로 구분된 목록을 만드는 방법은 무엇입니까?

FOR XML PATH를 사용하여 SQL Server에서 쉼표로 구분된 목록을 만드는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-18 10:27:10611검색

How to Create Comma-Delimited Lists in SQL Server Using FOR XML PATH?

FOR XML PATH를 사용하여 SQL Server에서 쉼표로 구분된 목록 생성

이 예에서는 FOR XML PATH을 사용하여 테이블에서 쉼표로 구분된 목록을 만드는 방법을 보여줍니다.

<code class="language-sql">SELECT 
    E1.deptno, 
    allemp = Replace ((SELECT E2.ename AS 'data()' 
                       FROM emp AS e2 
                       WHERE e1.deptno = e2.DEPTNO 
                       FOR xml PATH('')), ' ', ', ') 
 FROM EMP AS e1 
 GROUP BY DEPTNO; </code>

자세한 설명:

이 쿼리의 핵심은 FOR XML PATH이 실제 XML을 처리하는 방법입니다. 단순화된 직원 테이블을 고려해보세요:

<code>EmployeeID      Name
1               John Smith
2               Jane Doe</code>

FOR XML PATH 데이터를 XML 형식으로 변환합니다. 다음 쿼리를 실행합니다:

<code class="language-sql">SELECT  EmployeeID, Name
FROM    emp.Employee
FOR XML PATH ('Employee')</code>

은 다음 XML을 생성합니다.

<code class="language-xml"><employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee></code>

PATH 절에서 'Employee' 요소를 생략하면 외부 XML 태그가 제거됩니다. 수정된 쿼리:

<code class="language-sql">SELECT  Name
FROM    Employee
FOR XML PATH ('')</code>

은 다음을 생성합니다:

<code class="language-xml"><name>John Smith</name><name>Jane Doe</name></code>

원래 쿼리에서는 잘못된 XML 태그를 생성하려고 할 때 열 별칭 'data()'로 인해 오류가 발생했습니다. 이 문제를 해결하기 위해 상관 하위 쿼리는 오류를 숨기고 레이블을 제거하며 일반 텍스트를 생성합니다.

<code class="language-sql">SELECT  Name AS [Data()]
FROM    Employee
FOR XML PATH ('')</code>

마지막으로 REPLACE은 목록의 공백을 쉼표로 바꿉니다.

개선된 쿼리:

그러나 다음과 같은 개선된 쿼리가 바람직합니다.

<code class="language-sql">SELECT  E1.deptno, 
        STUFF(( SELECT  ', ' + E2.ename 
                FROM    emp AS e2 
                WHERE   e1.deptno = e2.DEPTNO 
                FOR XML PATH('')
            ), 1, 2, '') 
FROM    EMP AS e1 
GROUP BY DEPTNO; </code>

이 쿼리는 STUFF을 사용하여 첫 번째 쉼표와 공백을 제거하여 이름에 공백이 포함되어 있을 때 발생하는 오류를 방지합니다. 열 별칭을 생략하면 XML 태그가 생성되지 않습니다.

기타 참고사항:

특수 XML 문자를 이스케이프하려면 .valueFOR XML PATH과 함께 사용하세요.

<code class="language-sql">SELECT  E1.deptno, 
        STUFF(( SELECT  ', ' + E2.ename 
                FROM    emp AS e2 
                WHERE   e1.deptno = e2.DEPTNO 
                FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') 
FROM    EMP AS e1 
GROUP BY DEPTNO; </code>

위 내용은 FOR XML PATH를 사용하여 SQL Server에서 쉼표로 구분된 목록을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.