次の方法で共有


SQLXML 4.0 の DiffGram の概要

ここでは、DiffGram の概要を説明します。

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 は、このドキュメントでの説明用に使用するものです。たとえば、DiffGram が .NET Framework で 1 つのデータセットを基に生成される場合、この要素の名前にはデータセットの Name プロパティの値を使用します。このブロックには、変更後のすべての関連データを指定します。変更されていないデータも指定できます。DiffGram の処理ロジックでは、このブロックで diffgr:hasChanges 属性が指定されていない要素は無視されます。
  • <diffgr:before>
    省略可能なブロックです。更新または削除する必要がある元のレコード インスタンス (要素) を指定します。DiffGram で変更 (更新または削除) されるすべてのデータベース テーブルは、<before> ブロックの最上位要素に指定する必要があります。
  • <diffgr:errors>
    省略可能なブロックです。DiffGram の処理ロジックでは無視されます。

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 の処理ロジックでは、一定の規則に従い、挿入、更新、削除のうちどの操作であるかが判断されます。次の表は、この規則についてまとめたものです。

操作 説明

挿入

<DataInstance> ブロックに指定されている要素に対応する要素が <before> ブロックになく、その要素に diffgr:hasChanges 属性が指定されている場合 (diffgr:hasChanges=inserted)、DiffGram は挿入操作を示します。この場合、DiffGram では <DataInstance> ブロックで指定されたレコード インスタンスがデータベースに挿入されます。

diffgr:hasChanges 属性を指定しない場合、処理ロジックでこの要素は無視され、挿入は実行されません。実際のサンプルについては、「DiffGram の例 (SQLXML 4.0)」を参照してください。

更新

<DataInstance> ブロックに指定されている要素に対応する要素が <before> ブロックにもある場合 (両方の要素に同じ値の diffgr:id 属性が指定されている場合) で、<DataInstance> ブロックの要素に diffgr:hasChanges 属性が値 modified と共に指定されている場合、DiffGram は更新操作を示します。

<DataInstance> ブロックの要素に diffgr:hasChanges 属性が指定されていない場合、処理ロジックではエラーが返されます。実際のサンプルについては、「DiffGram の例 (SQLXML 4.0)」を参照してください。

<before> ブロックで diffgr:parentID が指定されている場合は、parentID で指定される要素の親子リレーションシップによって、レコードの更新順序が決定されます。

削除

<before> ブロックに指定されている要素に対応する要素が <DataInstance> ブロックにない場合、DiffGram は削除操作を示します。この場合、DiffGram では <before> ブロックで指定されたレコード インスタンスがデータベースから削除されます。実際のサンプルについては、「DiffGram の例 (SQLXML 4.0)」を参照してください。

<before> ブロックで diffgr:parentID が指定されている場合は、parentID で指定される要素の親子リレーションシップによって、レコードの削除順序が決定されます。

ms171804.note(ja-jp,SQL.90).gifメモ :
DiffGram にパラメータを渡すことはできません。