클라이언트 쪽 XML 서식 지정(SQLXML 4.0)
적용 대상: SQL Server Azure SQL 데이터베이스 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)