클라이언트측 XML 서식 지정(SQLXML 4.0)
이 항목에서는 클라이언트측 XML 서식 지정에 대한 정보를 제공합니다. 클라이언트측 서식 지정은 중간 계층의 XML 서식 지정을 의미합니다.
[!참고]
이 항목에서는 이미 FOR XML 절에 익숙한 사용자를 대상으로 클라이언트측의 FOR XML 절 사용에 대한 추가 정보를 제공합니다. FOR XML에 대한 자세한 내용은 FOR XML을 사용하는 XML 생성을 참조하십시오.
중요 클라이언트측 FOR XML 기능을 새 xml 데이터 형식과 함께 사용하려면 클라이언트는 항상 SQLOLEDB 공급자 대신 SQL Server Native Client(SQLNCLI10) 데이터 공급자를 사용해야 합니다. SQLNCLI10은 최신 버전의 SQL Server 공급자이며 SQL Server 2005에 도입된 데이터 형식을 완전히 이해합니다. SQLOLEDB 공급자를 사용하는 클라이언트측 FOR XML의 동작에서는 xml 데이터 형식을 문자열로 취급합니다.
클라이언트측에서 XML 문서 서식 지정
클라이언트 응용 프로그램에서 다음 쿼리를 실행하는 경우를 살펴보겠습니다.
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
다음 쿼리 부분만 서버로 전송됩니다.
SELECT FirstName, LastName
FROM Person.Contact
서버는 쿼리를 실행하고 FirstName과 LastName열을 포함한 행 집합을 클라이언트로 반환합니다. 그러면 중간 계층에서 행 집합에 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>
client-side-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부터 SQL Server의 XML 템플릿은 client-side-xml 특성 추가를 통해 향상되었습니다. 이 특성을 true로 설정하면 XML 서식이 클라이언트에서 지정됩니다. 이 템플릿 특성은 SQLXMLOLEDB 공급자별 ClientSideXML 속성과 기능 측면에서 동일합니다.
[!참고]
SQLXMLOLEDB 공급자를 사용하는 ADO 응용 프로그램에서 XML 템플릿을 실행하고, 템플릿의 client-side-xml 특성과 공급자 ClientSideXML 속성을 모두 지정하면 템플릿에 지정된 값이 우선 순위를 갖습니다.