Updategram 소개(SQLXML 4.0)Introduction to Updategrams (SQLXML 4.0)

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

MicrosoftMicrosoft SQL ServerSQL Server UPDATEGRAM 또는 OPENXML 함수를 사용 하 여 기존 XML 문서에서 데이터베이스를 수정 (삽입, 업데이트 또는 삭제) 할 수 있습니다 Transact-SQLTransact-SQL .You can modify (insert, update, or delete) a database in MicrosoftMicrosoft SQL ServerSQL Server from an existing XML document by using an updategram or the OPENXML Transact-SQLTransact-SQL function.

OPENXML 함수는 기존 XML 문서를 조각화하여 INSERT, UPDATE 또는 DELETE 문에 전달할 수 있는 행 집합을 제공함으로써 데이터베이스를 수정합니다.The OPENXML function modifies a database by shredding the existing XML document and providing a rowset that can be passed to an INSERT, UPDATE, or DELETE statement. OPENXML을 사용하면 작업이 데이터베이스 테이블에 대해 직접 수행되기 때문에With OPENXML, operations are performed directly against the database tables. OPENXML은 테이블과 같은 행 집합 공급자를 원본으로 표시할 수 있는 경우에 가장 적합합니다.Therefore, OPENXML is most appropriate wherever rowset providers, such as a table, can appear as a source.

OPENXML과 마찬가지로 updategram을 사용하면 데이터베이스에서 데이터를 삽입, 업데이트 또는 삭제할 수 있습니다. 그러나 updategram은 주석 XSD(또는 XDR) 스키마에서 제공하는 XML 뷰에 대해 작업을 수행합니다. 예를 들면 매핑 스키마에서 제공하는 XML 뷰에 업데이트가 적용됩니다.Like OPENXML, an updategram allows you to insert, update, or delete data in the database; however, an updategram works against the XML views provided by the annotated XSD (or an XDR) schema; for example, the updates are applied to the XML view provided by the mapping schema. 매핑 스키마에는 XML 요소와 특성을 해당 데이터베이스 테이블과 열에 매핑하는 데 필요한 정보가 있으며The mapping schema, in turn, has the necessary information to map XML elements and attributes to the corresponding database tables and columns. updategram은 이 매핑 정보를 사용하여 데이터베이스 테이블과 열을 업데이트합니다.The updategram uses this mapping information to update the database tables and columns.

注意

이 설명서에서는 사용자가 SQL ServerSQL Server 의 템플릿 및 매핑 스키마 지원에 대해 잘 알고 있다고 가정합니다.This documentation assumes that you are familiar with templates and mapping schema support in SQL ServerSQL Server. 자세한 내용은 주석이 추가 된 XSD 스키마 소개 (SQLXML 4.0)를 참조 하세요.For more information, see Introduction to Annotated XSD Schemas (SQLXML 4.0). XDR을 사용 하는 레거시 응용 프로그램의 경우 SQLXML 4.0)에서 사용 되지 (주석이 추가 된 Xdr 스키마 를 참조 하세요.For legacy applications that use XDR, see Annotated XDR Schemas (Deprecated in SQLXML 4.0).

Updategram의 필수 네임스페이스Required Namespaces in the Updategram

Updategram의 키워드 (예: <sync> , <before><after> )는 urn: updategram 네임 스페이스에 있습니다.The keywords in an updategram, such as <sync>, <before>, and <after>, exist in the urn:schemas-microsoft-com:xml-updategram namespace. 임의의 네임스페이스 접두사를 사용합니다.The namespace prefix that you use is arbitrary. 이 설명서에서 updg 접두사는 updategram 네임 스페이스를 나타냅니다.In this documentation, the updg prefix denotes the updategram namespace.

구문 검토Reviewing Syntax

Updategram는 <sync> <before> <after> updategram의 구문을 구성 하는, 및 블록이 포함 된 템플릿입니다.An updategram is a template with <sync>, <before>, and <after> blocks that form the syntax of the updategram. 다음 코드에서는 가장 간단한 형태의 updategram 구문을 보여 줍니다.The following code shows this syntax in its simplest form:

<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>  

다음 정의는 각 블록의 역할에 대해 설명합니다.The following definitions describe the role of each of these blocks:

<before>
레코드 인스턴스의 기존 상태("이전 상태"라고도 함)를 식별합니다.Identifies the existing state (also called "the before state") of the record instance.

<after>
데이터가 변경될 새 상태를 식별합니다.Identifies the new state to which data is to be changed.

<sync>
<before> 및 블록을 포함 <after> 합니다.Contains the <before> and <after> blocks. 블록은 둘 <sync> 이상의 및 블록 집합을 포함할 수 있습니다 <before> <after> .A <sync> block can contain more than one set of <before> and <after> blocks. 및 블록 집합이 여러 개 있는 경우 <before> <after> 이러한 블록 (비어 있는 경우에도)은 쌍으로 지정 해야 합니다.If there is more than one set of <before> and <after> blocks, these blocks (even if they are empty) must be specified as pairs. 또한 updategram에는 두 개 이상의 블록이 있을 수 있습니다 <sync> .Furthermore, an updategram can have more than one <sync> block. <sync> 블록은 하나의 트랜잭션 단위입니다. 즉, 블록의 모든 항목을 <sync> 수행 하거나 아무 것도 수행 하지 않습니다.Each <sync> block is one unit of transaction (which means that either everything in the <sync> block is done or nothing is done). Updategram에서 여러 블록을 지정 하는 경우 <sync> 한 블록의 오류는 다른 블록에 <sync> 영향을 주지 않습니다 <sync> .If you specify multiple <sync> blocks in an updategram, the failure of one <sync> block does not affect the other <sync> blocks.

Updategram가 레코드 인스턴스를 삭제, 삽입 또는 업데이트 하는지 여부는 및 블록의 내용에 따라 달라 집니다 <before> <after> .Whether an updategram deletes, inserts, or updates a record instance depends on the contents of the <before> and <after> blocks:

  • 블록에 해당 하는 인스턴스가 없는 블록에만 레코드 인스턴스가 표시 되 면 <before> <after> updategram는 삭제 작업을 수행 합니다.If a record instance appears only in the <before> block with no corresponding instance in the <after> block, the updategram performs a delete operation.

  • 블록에 해당 하는 인스턴스가 없는 블록에만 레코드 인스턴스가 표시 되 면 <after> <before> 삽입 작업입니다.If a record instance appears only in the <after> block with no corresponding instance in the <before> block, it is an insert operation.

  • 레코드 인스턴스가 블록에 표시 되 <before> 고 블록에 해당 인스턴스가 있으면 <after> 업데이트 작업입니다.If a record instance appears in the <before> block and has a corresponding instance in the <after> block, it is an update operation. 이 경우 updategram는 레코드 인스턴스를 블록에 지정 된 값으로 업데이트 합니다 <after> .In this case, the updategram updates the record instance to the values that are specified in the <after> block.

Updategram에 매핑 스키마 지정Specifying a Mapping Schema in the Updategram

Updategram에는 매핑 스키마(XSD 및 XDR 스키마 모두 지원됨)에서 제공하는 XML 추상화를 암시적 또는 명시적으로 지정할 수 있습니다. 즉, updategram은 매핑 스키마가 지정되었는지 여부에 관계없이 작업을 수행할 수 있습니다.In an updategram, the XML abstraction that is provided by a mapping schema (both XSD and XDR schemas are supported) can be implicit or explicit (that is, an updategram can work with or without a specified mapping schema). 매핑 스키마를 지정 하지 않으면 updategram는 암시적 매핑 (기본 매핑)을 가정 합니다. 여기서 블록 또는 블록의 각 요소는 <before> <after> 테이블에 매핑되고 각 요소의 자식 요소 또는 특성은 데이터베이스의 열에 매핑됩니다.If you do not specify a mapping schema, the updategram assumes an implicit mapping (the default mapping), where each element in the <before> block or <after> block maps to a table and each element's child element or attribute maps to a column in the database. 매핑 스키마를 명시적으로 지정할 경우에는 updategram의 요소 및 특성이 매핑 스키마의 요소 및 특성과 일치해야 합니다.If you explicitly specify a mapping schema, the elements and attributes in the updategram must match the elements and attributes in the mapping schema.

암시적(기본) 매핑Implicit (default) Mapping

일반적으로 간단한 업데이트를 수행하는 updategram에는 매핑 스키마가 필요하지 않습니다.In most cases, an updategram that performs simple updates might not require a mapping schema. 이 경우에는 기본 매핑 스키마가 사용됩니다.In this case, the updategram relies on the default mapping schema.

다음 updategram은 암시적 매핑을 보여 줍니다.The following updategram demonstrates implicit mapping. 이 예에서 updategram은 Sales.Customer 테이블에 새 고객을 추가합니다.In this example, the updategram inserts a new customer in the Sales.Customer table. 이 updategram는 암시적 매핑을 사용 하기 때문에 <Sales.Customer> 요소는 sales. customer 테이블에 매핑되고 CustomerID 및 SalesPersonID 특성은 sales. customer 테이블의 해당 열에 매핑됩니다.Because this updategram uses implicit mapping, the <Sales.Customer> element maps to the Sales.Customer table, and the CustomerID and SalesPersonID attributes map to the corresponding columns in the Sales.Customer table.

<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>  

명시적 매핑Explicit Mapping

매핑 스키마(XSD 또는 XDR)를 지정하면 updategram은 이 스키마를 사용하여 업데이트할 대상 데이터베이스 테이블과 열을 결정합니다.If you specify a mapping schema (either XSD or XDR), the updategram uses the schema to determine the database tables and columns that are to be updated.

Updategram가 복잡 한 업데이트를 수행 하는 경우 (예: 매핑 스키마에 지정 된 부모-자식 관계를 기준으로 여러 테이블에 레코드를 삽입 하는 경우) updategram가 실행 되는 매핑 스키마 특성을 사용 하 여 명시적으로 매핑 스키마를 제공 해야 합니다.If the updategram performs a complex update (for example, inserting records in multiple tables on the basis of the parent-child relationship that is specified in the mapping schema), you must explicitly provide the mapping schema by using the mapping-schema attribute against which the updategram executes.

Updategram은 템플릿이기 때문에 updategram의 매핑 스키마에 대해 지정된 경로는 템플릿 파일의 위치(updategram이 저장된 위치)를 기준으로 합니다.Because an updategram is a template, the path specified for the mapping schema in the updategram is relative to the location of the template file (relative to where the updategram is stored). 자세한 내용은 Updategram (SQLXML 4.0)에서 주석이 추가 된 매핑 스키마 지정 을 참조 하세요.For more information, see Specifying an Annotated Mapping Schema in an Updategram (SQLXML 4.0).

Updategram의 요소 중심 및 특성 중심 매핑Element-centric and Attribute-centric Mapping in Updategrams

Updategram에 매핑 스키마가 지정되지 않은 기본 매핑의 경우 updategram 요소는 테이블에 매핑되고 자식 요소(요소 중심 매핑)와 특성(특성 중심 매핑)은 열에 매핑됩니다.With default mapping (when the mapping schema is not specified in the updategram), the updategram elements map to tables and the child elements (in the case of element-centric mapping) and the attributes (in the case of attribute-centric mapping) map to columns.

요소 중심 매핑Element-centric Mapping

요소 중심 updategram의 경우 요소에는 요소의 속성을 나타내는 자식 요소가 포함됩니다.In an element-centric updategram, an element contains child elements that denote the properties of the element. 한 가지 예로 다음 updategram을 참조하십시오.As an example, refer to the following updategram. <Person.Contact> 요소는 <FirstName> 및 자식 요소를 포함 합니다 <LastName> .The <Person.Contact> element contains the <FirstName> and <LastName> child elements. 이러한 자식 요소는 요소의 속성입니다 <Person.Contact> .These child elements are properties of the <Person.Contact> element.

이 updategram는 매핑 스키마를 지정 하지 않으므로 updategram는 암시적 매핑을 사용 합니다 <Person.Contact> . 여기서 요소는 Person. Contact 테이블에 매핑되고 자식 요소는 FirstName 및 LastName 열에 매핑됩니다.Because this updategram does not specify a mapping schema, the updategram uses implicit mapping, where the <Person.Contact> element maps to the Person.Contact table and its child elements map to the FirstName and LastName columns.

<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>  

특성 중심 매핑Attribute-centric Mapping

특성 중심 매핑에서는 요소가 특성을 포함합니다.In an attribute-centric mapping, the elements have attributes. 다음 updategram은 특성 중심 매핑을 사용합니다.The following updategram uses attribute-centric mapping. 이 예제에서 요소는 <Person.Contact> FirstNameLastName 특성으로 구성 됩니다.In this example, the <Person.Contact> element consists of the FirstName and LastName attributes. 이러한 특성은 요소의 속성입니다 <Person.Contact> .These attributes are the properties of the <Person.Contact> element. 앞의 예제와 같이이 updategram는 매핑 스키마를 지정 하지 않으므로 암시적 매핑을 사용 하 여 <Person.Contact> 요소를 Person. Contact 테이블 및 요소의 특성을 테이블의 해당 열에 매핑합니다.As in the previous example, this updategram specifies no mapping schema, so it relies on implicit mapping to map the <Person.Contact> element to the Person.Contact table and the element's attributes to the respective columns in the table.

<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>  

요소 중심 및 특성 중심 매핑 모두 사용Using Both Element-centric and Attribute-centric Mapping

다음 updategram과 같이 요소 중심 및 특성 중심 매핑을 혼합하여 지정할 수 있습니다.You can specify a mix of element-centric and attribute-centric mapping, as shown in the following updategram. 요소에는 <Person.Contact> 특성과 자식 요소가 모두 포함 되어 있습니다.Notice that the <Person.Contact> element contains both an attribute and a child element. 또한 이 updategram에는 암시적 매핑이 사용됩니다.Also, this updategram relies on implicit mapping. 따라서 FirstName 특성과 <LastName> 자식 요소는 Person. Contact 테이블의 해당 열에 매핑됩니다.Thus, the FirstName attribute and the <LastName> child element map to corresponding columns in the Person.Contact table.

<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에서는 유효하지 않은 문자 사용Working with Characters Valid in SQL Server but Not Valid in XML

SQL ServerSQL Server에서는 테이블 이름에 공백이 포함될 수 있지만In SQL ServerSQL Server, table names can include a space. 이러한 형식의 테이블 이름은 XML에서는 유효하지 않습니다.However, this type of table name is not valid in XML.

유효한 SQL ServerSQL Server 식별자 이지만 유효한 XML 식별자가 아닌 문자를 인코딩하려면 ' __xHHHH _ _ '를 인코딩 값으로 사용 합니다. 여기서 HHHH는 가장 중요 한 비트 우선 순서로 문자에 대 한 4 자리 16 진수 UCS-2 코드를 나타냅니다.To encode characters that are valid SQL ServerSQL Server identifiers but are not valid XML identifiers, use '__xHHHH__' as the encoding value, where HHHH stands for the four-digit hexadecimal UCS-2 code for the character in the most significant bit-first order. 이 인코딩 체계를 사용 하면 공백 문자가 x0020 (공백 문자에 대 한 4 자리 16 진수 코드)로 바뀝니다. 따라서의 테이블 이름 [Order Details]는 SQL ServerSQL Server _ XML로 _x005B_Order_x0020_Details_x005D 됩니다.Using this encoding scheme, a space character gets replaced with x0020 (the four-digit hexadecimal code for a space character); thus, the table name [Order Details] in SQL ServerSQL Server becomes _x005B_Order_x0020_Details_x005D_ in XML.

마찬가지로 세 부분으로 구성 된 요소 이름 (예:)을 지정 해야 할 수도 있습니다 <[database].[owner].[table]> .Similarly, you might need to specify three-part element names, such as <[database].[owner].[table]>. XML에서는 대괄호 문자 ([및])가 유효 하지 않기 때문에이를로 지정 해야 합니다 <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_> . 여기서 _x005B _ 는 왼쪽 대괄호 ([)의 인코딩입니다 _ . _x005D 오른쪽 대괄호 (])에 대 한 인코딩입니다.Because the bracket characters ([ and ]) are not valid in XML, you must specify this as <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, where _x005B_ is the encoding for the left bracket ([) and _x005D_ is the encoding for the right bracket (]).

Updategram 실행Executing Updategrams

Updategram은 템플릿이기 때문에 템플릿의 모든 처리 메커니즘이 적용됩니다.Because an updategram is a template, all the processing mechanisms of a template apply to the updategram. SQLXML 4.0에서는 다음 방법 중 하나로 updategram을 실행할 수 있습니다.For SQLXML 4.0, you can execute an updategram in either of the following ways:

  • ADO 명령으로 전송By submitting it in an ADO command.

  • OLE DB 명령으로 전송By submitting it as an OLE DB command.

참고 항목See Also

Updategram 보안 고려 사항은 SQLXML 4.0)(Updategram Security Considerations (SQLXML 4.0)