Введение в работу с дельтами в SQLXML 4.0
В этом разделе приводится краткое введение в дельты.
Формат 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, то значение свойства Name набора данных будет использоваться как имя этого элемента. Этот блок содержит все данные после изменений, в том числе, возможно, данные, которые не были изменены. Логика обработки формата DiffGram игнорирует элементы из этого блока, для которых не задан атрибут diffgr:hasChanges.<Блок diffgr:before>
Этот необязательный блок содержит исходные экземпляры записи (элементы), которые необходимо обновить или удалить. Все изменяемые (обновляемые или удаляемые) дельтами таблицы базы данных должны появиться в виде элементов верхнего уровня в блоке <before>.<Блок diffgr:errors>
Этот необязательный блок игнорируется логикой обработки формата DiffGram.
Заметки DiffGram
Эти заметки определяются в пространстве имен DiffGram "urn:schemas-microsoft-com:xml-diffgram-01":
id
Этот атрибут используется, чтобы сопоставить элементы в блоках <before> и <DataInstance>.hasChanges
Для операции вставки или обновления, формат DiffGram должен указывать этот атрибут со значением inserted или modified. Если этот атрибут отсутствует, то соответствующий элемент в <DataInstance> игнорируется логикой обработки и обновления не выполняются. Рабочие образцы см. в разделе Примеры дельты (SQLXML 4.0).parentID
Этот атрибут используется, чтобы указать связь типа «родители-потомки» между элементами в DiffGram. Этот атрибут присутствует только в блоке <before>. Он используется в SQLXML при применении обновлений. Связь типа «родители-потомки» используется для определения порядка, в котором обрабатываются элементы формата DiffGram.
Основные сведения о логике обработки формата DiffGram
Логика обработки формата DiffGram использует определенные правила, чтобы установить, является ли операция вставкой, обновлением или удалением. Описание этих правил приводится в следующей таблице.
Операция |
Описание |
---|---|
Вставка |
Формат DiffGram задает операцию вставки, если элемент присутствует в блоке <DataInstance>, но отсутствует в соответствующем блоке <before>, а для элемента задан атрибут diffgr:hasChanges (diffgr:hasChanges=inserted). В этом случае DiffGram вставляет экземпляр записи, указанный в блоке <DataInstance> в базу данных. Если атрибут diffgr:hasChanges не указан, то элемент игнорируется логикой обработки и вставка не выполняется. Рабочие образцы см. в разделе Примеры дельты (SQLXML 4.0). |
Обновление |
Формат DiffGram указывает на операцию обновления, если существует элемент в блоке <before>, для которого есть соответствующий элемент в блоке <DataInstance> (то есть, оба элемента имеют атрибут diffgr:id с одинаковым значением), и атрибут diffgr:hasChanges задан со значением modified в элемента блока <DataInstance>. Если атрибут diffgr:hasChanges не задан для элемента в блоке <DataInstance>, то логика обработки возвратит ошибку. Рабочие образцы см. в разделе Примеры дельты (SQLXML 4.0). Если атрибут diffgr:parentID задан в блоке <before>, то связь типа «родители-потомки» для элементов, заданных parentID используется для определения порядка обновления записей. |
Удаление |
Формат DiffGram указывает на операцию удаления, если элемент присутствует в блоке <before>, но отсутствует в соответствующем блоке <DataInstance>. В этом случае DiffGram удаляет экземпляр записи, указанный в блоке <before> из базы данных. Рабочие образцы см. в разделе Примеры дельты (SQLXML 4.0). Если атрибут diffgr:parentID задан в блоке <before>, то связь типа «родители-потомки» для элементов, заданных parentID используется для определения порядка удаления записей. |
![]() |
---|
Невозможно передать параметры в DiffGrams. |