다음을 통해 공유


테이블/열에 대한 사용자 지정 XSD 매핑(SQLXML)

적용 대상: SQL ServerAzure SQL Database

XSD 스키마를 사용하여 관계형 데이터베이스의 XML 뷰를 제공하는 경우 스키마의 요소와 특성을 데이터베이스의 테이블 및 열에 매핑해야 합니다. 데이터베이스 테이블/뷰의 행은 XML 문서의 요소에 매핑됩니다. 데이터베이스의 열 값은 특성 또는 요소에 매핑합니다.

주석이 추가된 XSD 스키마에 대해 XPath 쿼리를 지정하면 스키마의 요소 및 특성에 대한 데이터가 매핑되는 테이블 및 열에서 검색됩니다. 데이터베이스에서 단일 값을 가져오려면 XSD 스키마에 지정된 매핑에 관계 및 필드 사양이 모두 있어야 합니다. 요소/특성의 이름이 매핑 되는 테이블/뷰 또는 열 이름과 같지 않은 경우 SQL:relationsql:field 주석을 사용하여 XML 문서의 요소 또는 특성과 데이터베이스의 테이블(뷰) 또는 열 간의 매핑을 지정합니다.

sql-relation

XSD 스키마의 XML 노드를 데이터베이스 테이블에 매핑하기 위해 sql:relation 주석이 추가됩니다. 테이블(뷰)의 이름은 sql:relation 주석의 값으로 지정됩니다.

요소에 sql:relation을 지정하면 이 주석의 범위가 해당 요소의 복합 형식 정의에 설명된 모든 특성 및 자식 요소에 적용되므로 주석 작성에 바로 가기가 제공됩니다.

Sql:relation 주석은 Microsoft SQL Server에서 유효한 식별자가 XML에서 유효하지 않은 경우에도 유용합니다. 예를 들어 "주문 세부 정보"는 SQL Server에서 유효한 테이블 이름이지만 XML에는 없습니다. 이러한 경우 sql:relation 주석을 사용하여 매핑을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

<xsd:element name="OD" sql:relation="[Order Details]">  

sql-field

sql-field 주석은 요소 또는 특성을 데이터베이스 열에 매핑합니다. 스키마의 XML 노드를 데이터베이스 열에 매핑하기 위해 sql:field 주석이 추가됩니다. 빈 콘텐츠 요소에는 sql:field를 지정할 수 없습니다.

예제

다음 예제를 사용하여 작업 샘플을 만들려면 특정 요구 사항을 충족해야 합니다. 자세한 내용은 SQLXML 실행 요구 사항 예제를 참조 하세요.

A. sql:relation 및 sql:field 주석 지정

이 예제에서 XSD 스키마는 <>FName 및 LName>> 자식 요소와 <ContactID 특성을 사용하는 <복합 형식의 Contact 요소로 구성됩니다.

sql:relation 주석은 Contact> 요소를 AdventureWorks 데이터베이스의 Person.Contact 테이블에 매핑<합니다. sql:field 주석은 FName 요소를 FirstName> 열에 매핑하고 <LName 요소를 LastName> 열에 매핑<합니다.

ContactID 특성에 대한 주석이 지정되지 않았습니다. 이렇게 하면 특성이 동일한 이름의 열에 기본 매핑됩니다.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Contact" sql:relation="Person.Contact" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="FName"  
                     sql:field="FirstName"   
                     type="xsd:string" />   
        <xsd:element name="LName"    
                     sql:field="LastName"    
                     type="xsd:string" />  
     </xsd:sequence>  
        <xsd:attribute name="ContactID"   
                       type="xsd:integer" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
스키마에 대해 샘플 XPath 쿼리를 테스트하려면
  1. 위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 MySchema-annotated.xml 저장합니다.

  2. 아래 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 MySchema-annotated.xml 저장한 디렉터리에 MySchema-annotatedT.xml 저장합니다.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="MySchema-annotated.xml">  
        /Contact  
      </sql:xpath-query>  
    </ROOT>  
    

    매핑 스키마(MySchema-annotated.xml)에 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리를 기준으로 합니다. 절대 경로도 지정할 수 있습니다. 예를 들면 다음과 같습니다.

    mapping-schema="C:\SqlXmlTest\MySchema-annotated.xml"  
    
  3. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 템플릿을 실행합니다.

    자세한 내용은 ADO를 사용하여 SQLXML 쿼리를 실행합니다.

결과 집합의 일부는 다음과 같습니다.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">   
 <Contact ContactID="1">   
    <FName>Gustavo</FName>   
    <LName>Achong</LName>   
 </Contact>   
  .....  
</ROOT>