다음을 통해 공유


SQLXML 4.0의 DiffGrams 소개

이 항목에서는 DiffGrams에 대해 간략하게 소개합니다.

DiffGram 형식

일반 DiffGram 형식은 다음과 같습니다.

<?xml version="1.0"?>
<diffgr:diffgram 
         xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
         xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <DataInstance>
      ...
   </DataInstance>
   [<diffgr:before>
        ...
   </diffgr:before>]

   [<diffgr:errors>
        ...
   </diffgr:errors>]
</diffgr:diffgram>

DiffGram 형식은 다음과 같은 블록으로 구성됩니다.

  • <DataInstance>
    이 요소의 이름 DataInstance는 이 설명서에서 설명용으로 사용됩니다. 예를 들어 .NET Framework의 데이터 집합에서 DiffGram을 생성한 경우 데이터 집합의 Name 속성이 이 요소의 이름으로 사용됩니다. 이 블록에는 수정되지 않은 데이터를 포함하여 변경 후의 모든 관련 데이터가 포함됩니다. 이 블록에 diffgr:hasChanges 특성이 지정되지 않은 요소는 DiffGram 처리 논리에서 무시됩니다.

  • <diffgr:before>
    이 선택적 블록에는 업데이트하거나 삭제해야 하는 원래 레코드 인스턴스(요소)가 포함됩니다. DiffGram에서 수정(업데이트 또는 삭제)할 모든 데이터베이스 테이블은 <before> 블록에서 최상위 요소로 표시되어야 합니다.

  • <diffgr:errors>
    이 선택적 블록은 DiffGram 처리 논리에서 무시됩니다.

DiffGram 주석

이 주석은 DiffGram 네임스페이스 **"urn:schemas-microsoft-com:xml-diffgram-01"**에서 정의됩니다.

  • id
    이 특성은 <before><DataInstance> 블록의 요소를 쌍으로 연결하는 데 사용됩니다.

  • hasChanges
    삽입 또는 업데이트 작업에서 DiffGram은 이 특성을 inserted 또는 modified로 지정해야 합니다. 이 특성이 없으면 **<DataInstance>**의 해당 요소가 처리 논리에서 무시되며 업데이트가 수행되지 않습니다. 예제 작업은 DiffGram 예(SQLXML 4.0)를 참조하십시오.

  • parentID
    이 특성은 DiffGram에서 요소 간의 부모-자식 관계를 지정하는 데 사용됩니다. 이 특성은 <before> 블록에만 나타나며 SQLXML에서 업데이트를 적용할 때 사용됩니다. 부모-자식 관계는 DiffGram에서 요소가 처리되는 순서를 결정하는 데 사용됩니다.

DiffGram 처리 논리 이해

DiffGram 처리 논리는 특정 규칙에 따라 작업이 삽입, 업데이트 또는 삭제 작업인지를 결정합니다. 다음 표에서는 이러한 규칙에 대해 설명합니다.

작업

설명

삽입

DiffGram에서 요소가 <DataInstance> 블록에 있지만 해당 <before> 블록에 없고 요소에 대해 diffgr:hasChanges 특성이 지정된(diffgr:hasChanges=inserted) 경우 삽입 작업을 나타냅니다. 이 경우 DiffGram은 <DataInstance> 블록에 지정된 레코드를 데이터베이스에 삽입합니다.

diffgr:hasChanges 특성이 지정되지 않은 경우 요소는 처리 논리에서 무시되고 삽입이 수행되지 않습니다. 예제 작업은 DiffGram 예(SQLXML 4.0)를 참조하십시오.

업데이트

DiffGram에서 <before> 블록에 요소가 있고 <DataInstance> 블록에도 해당하는 요소가 있으며(즉, 두 요소의 diffgr:id 특성 값이 같음) <DataInstance> 블록에서 해당 요소의 diffgr:hasChanges 특성 값이 modified로 지정된 경우 업데이트 작업을 나타냅니다.

<DataInstance> 블록에서 해당 요소에 대해 diffgr:hasChanges 특성이 지정되지 않은 경우 처리 논리에서 오류가 반환됩니다. 예제 작업은 DiffGram 예(SQLXML 4.0)를 참조하십시오.

<before> 블록에서 diffgr:parentID를 지정하는 경우 parentID로 지정되는 요소의 부모-자식 관계에 따라 업데이트되는 레코드의 순서가 결정됩니다.

삭제

DiffGram에서 요소가 <before> 블록에는 나타나지만 해당 <DataInstance> 블록에는 없는 경우 삭제 작업을 나타냅니다. 이 경우 DiffGram은 <before> 블록에 지정된 레코드 인스턴스를 데이터베이스에서 삭제합니다. 예제 작업은 DiffGram 예(SQLXML 4.0)를 참조하십시오.

<before> 블록에서 diffgr:parentID를 지정하는 경우 parentID로 지정되는 요소의 부모-자식 관계에 따라 삭제되는 레코드의 순서가 결정됩니다.

[!참고]

DiffGrams에 매개 변수를 전달할 수는 없습니다.