다음을 통해 공유


Updategram 소개(SQLXML 4.0)

적용 대상: SQL ServerAzure SQL Database

Updategram 또는 OPENXML Transact-SQL 함수를 사용하여 기존 XML 문서에서 Microsoft SQL Server의 데이터베이스를 수정(삽입, 업데이트 또는 삭제)할 수 있습니다.

OPENXML 함수는 기존 XML 문서를 파쇄하고 INSERT, UPDATE 또는 DELETE 문에 전달할 수 있는 행 집합을 제공하여 데이터베이스를 수정합니다. OPENXML을 사용하면 데이터베이스 테이블에 대해 작업이 직접 수행됩니다. 따라서 OPENXML은 테이블과 같은 행 집합 공급자가 원본으로 표시할 수 있는 모든 위치에서 가장 적합합니다.

OPENXML과 마찬가지로 updategram을 사용하면 데이터베이스에 데이터를 삽입, 업데이트 또는 삭제할 수 있습니다. 그러나 updategram은 주석이 추가된 XSD(또는 XDR) 스키마에서 제공하는 XML 뷰에 대해 작동합니다. 예를 들어 업데이트는 매핑 스키마에서 제공하는 XML 보기에 적용됩니다. 매핑 스키마에는 XML 요소와 특성을 해당 데이터베이스 테이블과 열에 매핑하는 데 필요한 정보가 있으며 updategram은 이 매핑 정보를 사용하여 데이터베이스 테이블 및 열을 업데이트합니다.

참고 항목

이 설명서에서는 SQL Server의 템플릿 및 매핑 스키마 지원에 익숙하다고 가정합니다. 자세한 내용은 주석이 추가된 XSD 스키마 소개(SQLXML 4.0)를 참조하세요. XDR 을 사용하는 레거시 애플리케이션의 경우 주석이 추가된 XDR 스키마(SQLXML 4.0에서는 사용되지 않음)를 참조하세요.

Updategram의 필수 네임스페이스

동기화><<>>와 같은< updategram의 키워드는 urn:schemas-microsoft-com:xml-updategram 네임스페이스에 있습니다. 임의의 네임스페이스 접두사를 사용합니다. 이 설명서에서 updg 접두사는 updategram 네임스페이스를 표시합니다.

구문 검토

updategram은 updategram의 구문을 형성하는 블록 전후에 동기화>>><<된 템플릿<입니다. 다음 코드는 이 구문을 가장 간단한 형식으로 보여줍니다.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] >  
    <updg:before>  
        ...  
    </updg:before>  
    <updg:after>  
        ...  
    </updg:after>  
  </updg:sync>  
</ROOT>  

다음 정의는 이러한 각 블록의 역할을 설명합니다.

<전에>
레코드 인스턴스의 기존 상태("이전 상태"라고도 함)를 식별합니다.

<후>
데이터가 변경될 새 상태를 식별합니다.

<sync>
<앞>과< 뒤> 블록을 포함합니다. 동기화> 블록에는 <두 개 이상의 이전> 및< 이후> 블록 집합<이 포함될 수 있습니다. 앞/<후> 블록 집합<>이 두 개 이상 있는 경우 이러한 블록(비어 있더라도)을 쌍으로 지정해야 합니다. 또한 updategram에는 둘 <이상의 동기화> 블록이 있을 수 있습니다. 각 <동기화> 블록은 하나의 트랜잭션 단위입니다(즉, 동기화> 블록의 <모든 작업이 수행되거나 아무 작업도 수행되지 않음). updategram에서 여러 <동기화 블록을 지정하는 경우 한 <동기화> 블록의 실패는 다른 <동기화>> 블록에 영향을 주지 않습니다.

updategram이 레코드 인스턴스를 삭제, 삽입 또는 업데이트할지 여부는 블록 전후<>><내용에 따라 달라집니다.

  • 레코드 인스턴스가 after> 블록에 <해당 인스턴스가 없는 이전> 블록에<만 나타나는 경우 updategram은 삭제 작업을 수행합니다.

  • 레코드 인스턴스가 이전 블록에 해당 인스턴스가 없는 after> 블록에><만 나타나는 경우 삽입 작업입니다.<

  • 레코드 인스턴스가 이전> 블록에< 표시되고 After> 블록에 해당 인스턴스가 <있는 경우 업데이트 작업입니다. 이 경우 updategram은 레코드 인스턴스를 후>방 블록에 지정된 값으로 <업데이트합니다.

Updategram에서 매핑 스키마 지정

updategram에서 매핑 스키마에서 제공하는 XML 추상화(XSD 및 XDR 스키마 모두 지원됨)는 암시적 또는 명시적일 수 있습니다(즉, updategram은 지정된 매핑 스키마를 사용하거나 사용하지 않고 작동할 수 있습니다). 매핑 스키마를 지정하지 않으면 updategram은 암시적 매핑(기본 매핑)을 가정합니다. 여기서 이전> 블록 또는 <이후> 블록의 각 요소는 <테이블에 매핑되고 각 요소의 자식 요소 또는 특성은 데이터베이스의 열에 매핑됩니다. 매핑 스키마를 명시적으로 지정하는 경우 updategram의 요소와 특성은 매핑 스키마의 요소 및 특성과 일치해야 합니다.

암시적(기본값) 매핑

대부분의 경우 간단한 업데이트를 수행하는 updategram에는 매핑 스키마가 필요하지 않을 수 있습니다. 이 경우 updategram은 기본 매핑 스키마를 사용합니다.

다음 updategram은 암시적 매핑을 보여 줍니다. 이 예제에서 updategram은 Sales.Customer 테이블에 새 고객을 삽입합니다. 이 updategram은 암시적 매핑 <을 사용하므로 Sales.Customer> 요소는 Sales.Customer 테이블에 매핑되고 CustomerID 및 SalesPersonID 특성은 Sales.Customer 테이블의 해당 열에 매핑됩니다.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
<updg:before>  
</updg:before>  
<updg:after>  
    <Sales.Customer CustomerID="1" SalesPersonID="277" />  
    </updg:after>  
</updg:sync>  
</ROOT>  

명시적 매핑

매핑 스키마(XSD 또는 XDR)를 지정하는 경우 updategram은 스키마를 사용하여 업데이트할 데이터베이스 테이블과 열을 결정합니다.

updategram이 복잡한 업데이트를 수행하는 경우(예: 매핑 스키마에 지정된 부모-자식 관계를 기반으로 여러 테이블에 레코드 삽입) updategram이 실행되는 매핑 스키마 특성을 사용하여 매핑 스키마 를 명시적으로 제공해야 합니다.

updategram은 템플릿이므로 updategram의 매핑 스키마에 지정된 경로는 템플릿 파일의 위치(updategram이 저장되는 위치를 기준으로)를 기준으로 합니다. 자세한 내용은 Updategram에서 주석이 추가된 매핑 스키마 지정(SQLXML 4.0)을 참조하세요.

Updategram의 요소 중심 및 특성 중심 매핑

기본 매핑(updategram에 매핑 스키마가 지정되지 않은 경우)을 사용하면 updategram 요소가 테이블 및 자식 요소(요소 중심 매핑의 경우)에 매핑되고 특성(특성 중심 매핑의 경우)이 열에 매핑됩니다.

요소 중심 매핑

요소 중심 updategram에서 요소에는 요소의 속성을 나타내는 자식 요소가 포함됩니다. 예를 들어 다음 updategram을 참조하세요. Person.Contact> 요소에는< FirstName 및< LastName>> 자식 요소가 포함됩니다.< 이러한 자식 요소는 Person.Contact> 요소의 <속성입니다.

이 updategram은 매핑 스키마를 지정하지 않으므로 updategram은 암시적 매핑을 사용합니다. 여기서 <Person.Contact 요소는 Person.Contact> 테이블에 매핑되고 자식 요소는 FirstName 및 LastName 열에 매핑됩니다.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:after>  
    <Person.Contact>  
       <FirstName>Catherine</FirstName>  
       <LastName>Abel</LastName>  
    </Person.Contact>  
  </updg:after>  
</updg:sync>  
</ROOT>  

특성 중심 매핑

특성 중심 매핑에서는 요소가 특성을 포함합니다. 다음 updategram은 특성 중심 매핑을 사용합니다. 이 예제<에서 Person.Contact> 요소는 FirstName 및 LastName 특성으로 구성됩니다. 이러한 특성은 Person.Contact> 요소의 <속성입니다. 이전 예제와 마찬가지로 이 updategram은 매핑 스키마를 지정하지 않으므로 암시적 매핑을 사용하여 Person.Contact 요소를 Person.Contact> 테이블에 매핑하고 요소의 특성을 테이블의 해당 열에 매핑<합니다.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
    <Person.Contact FirstName="Catherine" LastName="Abel" />  
  </updg:after>  
</updg:sync>  
</ROOT>  

요소 중심 및 특성 중심 매핑 모두 사용

다음 updategram에 표시된 것처럼 요소 중심 및 특성 중심 매핑의 혼합을 지정할 수 있습니다. Person.Contact> 요소에는 <특성과 자식 요소가 모두 포함되어 있습니다. 또한 이 updategram은 암시적 매핑을 사용합니다. 따라서 FirstName 특성 및< LastName 자식> 요소는 Person.Contact 테이블의 해당 열에 매핑됩니다.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
    <Person.Contact FirstName="Catherine" >  
       <LastName>Abel</LastName>  
    </Person.Contact>  
  </updg:after>  
</updg:sync>  
</ROOT>  

SQL Server에서 유효하지만 XML에서는 유효하지 않은 문자 작업

SQL Server에서 테이블 이름에는 공백이 포함될 수 있습니다. 그러나 이 형식의 테이블 이름은 XML에서 유효하지 않습니다.

유효한 SQL Server 식별자이지만 유효한 XML 식별자가 아닌 문자를 인코딩하려면 인코딩 값으로 '__xHHHH__'을 사용합니다. 여기서 HHHH는 가장 중요한 비트 우선 순서의 문자에 대한 4자리 16진수 UCS-2 코드를 의미합니다. 이 인코딩 체계를 사용하면 공백 문자가 x0020(공백 문자의 4자리 16진수 코드)으로 바뀝니다. 따라서 SQL Server의 테이블 이름 [주문 세부 정보]는 XML에서 _x005B_Order_x0020_Details_x005D_ 됩니다.

마찬가지로 [database]와 같은 <세 부분으로 구성된 요소 이름을 지정해야 할 수도 있습니다.[ 소유자]. [table]>. XML에서는 대괄호 문자([및 ])가 유효하지 않으므로 _x005B_database_x005D_ <._x005B_owner_x005D_._x005B_table_x005D_>로 지정해야 합니다. 여기서 _x005B_ 왼쪽 대괄호([)의 인코딩이고 _x005D_ 오른쪽 대괄호(])의 인코딩입니다.

Updategram 실행

Updategram은 템플릿이기 때문에 템플릿의 모든 처리 메커니즘이 적용됩니다. SQLXML 4.0에서는 다음 방법 중 하나로 updategram을 실행할 수 있습니다.

  • ADO 명령으로 전송

  • OLE DB 명령으로 제출합니다.

참고 항목

Updategram 보안 고려 사항(SQLXML 4.0)