다음을 통해 공유


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

적용 대상: SQL ServerAzure 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 데이터 형식을 문자열로 처리합니다.

Important

SNAC(SQL Server Native Client)는 다음과 함께 제공되지 않습니다.

  • SQL Server 2022(16.x) 이상
  • SQL Server Management Studio 19 이상

SQL Server Native Client(SQLNCLI 또는 SQLNCLI11)와 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새로운 애플리케이션 개발에 권장되지 않습니다.

새 프로젝트의 경우 다음 드라이버 중 하나를 사용합니다.

SQL Server 데이터베이스 엔진(버전 2012부터 2019까지)의 구성 요소로 제공되는 SQLNCLI의 경우 이 수명 주기 예외 지원을 참조하세요.

클라이언트 쪽에서 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 모드 Comment(설명)
RAW 클라이언트 쪽 또는 서버 쪽 FOR XML에 지정된 경우 동일한 결과를 생성합니다.
중첩 서버 쪽의 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)로 설정되므로 저장 프로시저는 서버에서 실행되고 서버에서 반환되는 두 열 행 집합은 중간 계층의 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 관리되는 클래스
클라이언트 쪽 및 서버 쪽 XML 서식 지정(SQLXML 4.0)
SqlXmlCommand 개체(SQLXML 관리 클래스)
XML 데이터(SQL Server)