Поделиться через


Общие сведения о диаграммах обновления (SQLXML 4.0)

Область применения: SQL Server База данных SQL Azure

Базу данных в Microsoft SQL Server можно изменить (вставить, обновить или удалить) из существующего XML-документа с помощью диаграммы обновления или функции OPENXML Transact-SQL.

Функция OPENXML изменяет базу данных, разделяя существующий XML-документ и формируя набор строк, который можно передавать инструкциям INSERT, UPDATE и DELETE. С помощью функции OPENXML операции выполняются непосредственно с таблицами базы данных. Поэтому использование функции OPENXML является наиболее оптимальным вариантом во всех случаях, когда поставщики наборов строк, например таблицы, могут быть источниками.

Диаграммы обновления, подобно функции OPENXML, позволяют вставлять, обновлять и удалять данные в базе данных. Однако диаграммы обновления работают не с таблицами, а с XML-представлениями, создаваемыми аннотированной XSD-схемой (или XDR-схемой); например, обновления применяются к XML-представлению, созданному сопоставляемой схемой. Схема сопоставления в свою очередь содержит данные, необходимые для сопоставления XML-элементов и атрибутов с соответствующими таблицами и столбцами базы данных. Диаграмма обновления использует эти данные сопоставления, чтобы выполнить обновление таблиц и столбцов базы данных.

Примечание.

В этой документации предполагается, что вы знакомы с шаблонами и поддержкой схемы сопоставления в SQL Server. Дополнительные сведения см. в разделе "Общие сведения о аннотированных схемах XSD" (SQLXML 4.0). Устаревшие приложения, использующие XDR, см. в разделе "Аннотированные схемы XDR" (устаревшие в SQLXML 4.0).

Обязательные пространства имен в диаграмме обновления

Ключевые слова в диаграмме обновления, такие как <синхронизация>,< до> и <после>, существуют в пространстве имен urn:schemas-microsoft-com:xml-updategram. Префикс пространства имен может быть произвольным. В этой документации префикс updg обозначает пространство имен диаграммы обновления.

Обзор синтаксиса

Диаграмма обновления — это шаблон с <синхронизацией>,< до> и <после> блоков, которые образуют синтаксис диаграммы обновления. Следующий код показывает этот синтаксис в его простейшей форме:

<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>
Содержит блоки <до> и <после> . Блок <синхронизации> может содержать несколько наборов <до> и< после> блоков. Если существует несколько наборов <до> и< после> блоков, эти блоки (даже если они пустые) должны быть указаны в виде пар. Кроме того, на диаграмме обновления может быть несколько <блоков синхронизации> . Каждый блок синхронизации — это одна единица транзакции (это означает, что все в блоке <синхронизации>> выполнено или ничего не сделано).< Если в диаграмме обновления указано несколько блоков синхронизации>, сбой одного <блока синхронизации> не влияет на другие <блоки синхронизации>.<

Независимо от того, удаляет ли диаграмма обновления, вставляет или обновляет экземпляр записи, зависит от содержимого <блоков до> и <после> него:

  • Если экземпляр записи отображается только в блоке <до> отсутствия соответствующего экземпляра в блоке <после> блокировки, то диаграмма обновления выполняет операцию удаления.

  • Если экземпляр записи отображается только в блоке <после> отсутствия соответствующего экземпляра в блоке <перед> блоком, это операция вставки.

  • Если экземпляр записи отображается в <блоке до> и имеет соответствующий экземпляр в блоке <после> блокировки, это операция обновления. В этом случае диаграмма обновления обновляет экземпляр записи до значений, указанных в блоке <после> блокировки.

Указание сопоставления схемы в диаграмме обновления

В диаграмме обновления XML-абстракция, созданная сопоставляемой схемой (поддерживаются схемы XSD и XDR), может быть явной или неявной (то есть диаграмма обновления может работать как с заданной схемой сопоставления, так и без нее). Если схема сопоставления не указана, то в схеме обновления предполагается неявное сопоставление (сопоставление по умолчанию), где каждый элемент в <> блоке или< после> сопоставления блоков с таблицей и дочерним элементом или атрибутом каждого элемента сопоставляется со столбцом в базе данных. Если схема сопоставления указана явно, то элементы и атрибуты в диаграмме обновления должны совпадать с элементами и атрибутами сопоставляемой схемы.

Неявное сопоставление (по умолчанию)

В большинстве случаев диаграмма обновления, выполняющая простые обновления, не требует схемы сопоставления. В такой ситуации диаграмма обновления полагается на схему сопоставления, принятую по умолчанию.

В следующей диаграмме обновления показано неявное сопоставление. В этом примере диаграмма обновления применяется для вставки данных нового клиента в таблицу Sales.Customer. Так как эта диаграмма обновления использует неявное сопоставление, <элемент 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), диаграмма обновления использует эту схему для определения подлежащих обновлению таблиц и столбцов базы данных.

Если на диаграмме обновления выполняется комплексное обновление (например, вставка записей в несколько таблиц на основе связи родительского дочернего элемента, указанной в схеме сопоставления), необходимо явно указать схему сопоставления с помощью атрибута схемы сопоставления, для которого выполняется диаграмма обновления.

Диаграмма обновления является шаблоном, поэтому заданный в ней путь для схемы сопоставления зависит от расположения файла шаблона (является относительным). Дополнительные сведения см. в разделе "Указание схемы аннотированного сопоставления" в диаграмме обновления (SQLXML 4.0).

Элементная и атрибутивная модель сопоставления в диаграммах обновления

При сопоставлении по умолчанию (когда сопоставляемая схема не указывается в диаграмме обновления), элементы диаграммы обновления сопоставляются с таблицами и дочерними элементами (в случае элементной модели сопоставления), а атрибуты сопоставляются со столбцами (в случае атрибутивной модели сопоставления).

Сопоставление, ориентированное на элементы

В диаграмме обновления, основанной на элементах, элемент содержит дочерние элементы, обозначающие свойства этого элемента. В качестве примера см. следующую диаграмму обновления. Элемент Person.Contact> содержит дочерние< элементы FirstName> и <LastName>.< Эти дочерние элементы являются свойствами <элемента Person.Contact> .

Так как эта диаграмма обновления не указывает схему сопоставления, она использует неявное сопоставление, где <элемент 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>  

атрибутивное сопоставление

В атрибутивной модели сопоставления элементы имеют атрибуты. В следующей диаграмме обновления используется атрибутивная модель сопоставления. В этом примере элемент Person.Contact> состоит из атрибутов FirstName и LastName.< Эти атрибуты являются свойствами <элемента Person.Contact> . Как и в предыдущем примере, эта диаграмма обновления не указывает схему сопоставления, поэтому она использует неявное сопоставление для сопоставления <элемента 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>  

Одновременное использование элементной и атрибутивной моделей сопоставления

Можно использовать сочетание элементной и атрибутивной моделей сопоставления, как показано в следующей диаграмме обновления. Обратите внимание, что <элемент Person.Contact> содержит атрибут и дочерний элемент. Кроме того, в этой диаграмме обновления используется неявное сопоставление. Таким образом, атрибут 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 обозначает четырехзначный шестнадцатеричный код UCS-2 для символа в самом значительном битовом порядке. Используя эту схему кодирования, символ пробела заменяется на x0020 (шестнадцатеричный код четырехзначного шестнадцатеричного кода для пробела); Таким образом, имя таблицы [Сведения о заказе] в SQL Server становится _x005B_Order_x0020_Details_x005D_ в XML.

Аналогичным образом может потребоваться указать имена элементов из трех частей, например <[база данных]. владелец]. [таблица]>. Поскольку символы скобки ([ и ]) недопустимы в XML, необходимо указать это как <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, где _x005B_ является кодировкой для левой скобки ([) и _x005D_ кодировкой для правой скобки (]).

Выполнение диаграмм обновления

Диаграмма обновления является шаблоном, поэтому к ней применяются все механизмы обработки шаблона. В SQLXML 4.0 диаграмму обновления можно выполнить следующими способами:

  • с помощью команды ADO;

  • с помощью команды OLE DB.

См. также

Вопросы безопасности диаграмм обновления (SQLXML 4.0)