클라이언트 쪽 XML 서식 지정(SQLXML 4.0)

적용 대상: SQL Server(지원되는 모든 버전) Azure SQL Database Azure SQL Managed Instance

이 항목에서는 클라이언트 쪽 XML 서식 지정에 대한 정보를 제공합니다. 클라이언트 쪽 서식 지정은 중간 계층의 XML 서식 지정을 의미합니다.

참고

이 항목에서는 이미 FOR XML 절에 익숙한 사용자를 대상으로 클라이언트 쪽의 FOR XML 절 사용에 대한 추가 정보를 제공합니다. FOR XML에 대한 자세한 내용은 FOR XML 을 사용하여 XML 생성을 참조하세요.

SQLNCLI11은 SQL Server 2005(9.x)에 도입된 데이터 형식을 완전히 이해하는 SQL Server 공급자의 첫 번째 버전입니다. SQLOLEDB 공급자를 사용하는 클라이언트 쪽 FOR XML에 대한 동작은 xml 데이터 형식을 문자열로 처리합니다.

중요

SQL Server Native Client(종종 축약된 SNAC)은 SQL Server 2022(16.x) 및 SQL Server Management Studio 19(SSMS)에서 제거되었습니다. SQL Server Native Client(SQLNCLI 또는 SQLNCLI11) 및 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새 개발에 권장되지 않습니다. SQL Server 새로운 Microsoft OLE DB 드라이버(MSOLEDBSQL) 또는 최신 Microsoft ODBC Driver for SQL Server 전환합니다.

클라이언트 쪽에서 XML 문서 서식 지정

클라이언트 애플리케이션에서 다음 쿼리를 실행하는 경우를 살펴보겠습니다.

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

다음 쿼리 부분만 서버로 전송됩니다.

SELECT FirstName, LastName  
FROM   Person.Contact  

서버는 쿼리를 실행하고 행 집합(FirstName 및 LastNamecolumns 포함)을 클라이언트에 반환합니다. 그러면 중간 계층에서 행 집합에 FOR XML 변환을 적용하고 XML 서식을 클라이언트에 반환합니다.

마찬가지로, XPath 쿼리를 실행하면 서버는 클라이언트에 행 집합을 반환하고 FOR XML EXPLICIT 변환이 클라이언트의 행 집합에 적용되어 필요한 XML 서식을 생성합니다.

다음 표에서는 클라이언트 쪽 FOR XML에서 지정할 수 있는 모드를 보여 줍니다.

클라이언트 쪽 FOR XML 모드 의견
RAW 클라이언트 쪽 또는 서버 쪽 FOR XML에 지정될 경우 동일한 결과를 생성합니다.
NESTED 서버 쪽의 FOR XML AUTO 모드와 비슷합니다.
EXPLICIT 서버 쪽 FOR XML EXPLICIT 모드와 비슷합니다.

참고

AUTO 모드를 지정하고 클라이언트 쪽 XML 서식 지정을 요청하는 경우 전체 쿼리가 서버로 전송됩니다. 즉, XML 서식 지정이 서버에서 실행됩니다. 이는 편의상 수행되는 기능이지만 NESTED 모드는 생성되는 XML 문서의 요소 이름으로 기본 테이블 이름을 반환합니다. 일부 애플리케이션에는 기본 테이블을 이름이 필요할 수 있습니다. 예를 들어 저장 프로시저를 실행하고 결과 데이터를 데이터 세트(Microsoft .NET Framework)에 로드한 다음 나중에 DiffGram을 생성하여 테이블의 데이터를 업데이트할 수 있습니다. 이러한 경우 기본 테이블 정보가 필요할 수 있으므로 NESTED 모드를 사용해야 합니다.

클라이언트 쪽 XML 서식 지정의 이점

다음은 클라이언트에서 XML 서식 지정을 할 때의 이점입니다.

서버에 단일 행 집합을 반환하는 저장 프로시저가 있는 경우 클라이언트 쪽 FOR XML 변환을 요청하여 XML을 생성할 수 있습니다.

예를 들어 다음과 같은 저장 프로시저가 있다고 가정해 보십시오. 이 프로시저는 AdventureWorks 데이터베이스의 Person.Contact 테이블에서 직원의 이름과 성을 반환합니다.

IF EXISTS (SELECT name FROM sysobjects  
   WHERE name = 'GetContacts' AND type = 'P')  
   DROP PROCEDURE GetContacts  
GO  
CREATE PROCEDURE GetContacts  
AS  
    SELECT   FirstName, LastName  
    FROM     Person.Contact  

다음 예제 XML 템플릿은 저장 프로시저를 실행합니다. FOR XML 절은 저장 프로시저 이름 뒤에 지정됩니다.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

클라이언트 쪽 xml 특성은 템플릿에서 1(true)로 설정되므로 서버에서 저장 프로시저가 실행되고 서버에서 반환되는 2열 행 집합이 중간 계층의 XML로 변환되어 클라이언트로 반환됩니다. 이 문서에는 결과의 일부분만 나와 있습니다.

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

참고

SQLXMLOLEDB 공급자 또는 SQLXML 관리 클래스를 사용하는 경우 ClientSideXml 속성을 사용하여 클라이언트 쪽 XML 서식을 요청할 수 있습니다.

작업의 균형이 더 잘 이루어집니다.

클라이언트에서 XML 서식 지정을 수행하므로 서버와 클라이언트 간에 작업 균형이 이루어지고 서버에서 다른 작업을 할 수 있는 여유가 확보됩니다.

클라이언트 쪽 XML 서식 지정 지원

클라이언트 쪽 XML 서식 지정 기능을 지원하기 위해 SQLXML은 다음을 제공합니다.

  • SQLXMLOLEDB 공급자

  • SQLXML 관리되는 클래스

  • 향상된 XML 템플릿 지원

  • SqlXmlCommand.ClientSideXml 속성

    SQLXML 관리되는 클래스의 이 속성을 true로 설정하여 클라이언트 쪽 서식 지정을 지정할 수 있습니다.

향상된 XML 템플릿 지원

SQL Server 2005(9.x)부터 SQL Server XML 템플릿은 클라이언트 쪽 xml 특성을 추가하여 향상되었습니다. 이 특성을 true로 설정하면 XML 서식이 클라이언트에서 지정됩니다. 이 템플릿 특성은 SQLXMLOLEDB 공급자별 ClientSideXML 속성의 기능에서 동일합니다.

참고

SQLXMLOLEDB 공급자를 사용하는 ADO 애플리케이션에서 XML 템플릿을 실행하고 템플릿의 클라이언트 쪽 xml 특성과 ClientSideXML 공급자 속성을 모두 지정하는 경우 템플릿에 지정된 값이 우선합니다.

참고 항목

클라이언트 쪽 및 서버 쪽 XML 서식 지정 아키텍처(SQLXML 4.0)
FOR XML(SQL Server)
FOR XML 보안 고려 사항(SQLXML 4.0)
SQLXML 4.0의 xml 데이터 형식 지원
SQLXML 관리되는 클래스
클라이언트 쪽 vs. 서버 쪽 XML 서식 지정(SQLXML 4.0)
SqlXmlCommand 개체(SQLXML 관리되는 클래스)
XML 데이터(SQL Server)