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

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database

Можно изменить (вставить, обновить или удалить) базу данных MicrosoftMicrosoft SQL ServerSQL Server из существующего XML-документа с помощью функции диаграмма обновления или OPENXML 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, позволяют вставлять, обновлять и удалять данные в базе данных. Однако диаграммы обновления работают не с таблицами, а с XML-представлениями, создаваемыми аннотированной XSD-схемой (или XDR-схемой); например, обновления применяются к 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. Диаграмма обновления использует эти данные сопоставления, чтобы выполнить обновление таблиц и столбцов базы данных.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, см. в разделе схемы XDR с Заметками (не рекомендуется в SQLXML 4,0).For legacy applications that use XDR, see Annotated XDR Schemas (Deprecated in SQLXML 4.0).

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

Ключевые слова в диаграмма обновления, такие как <sync> , <before> и <after> , существуют в пространстве имен urn: schemas-microsoft-com: XML-диаграмма обновления .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 обозначает пространство имен Диаграмма обновления .In this documentation, the updg prefix denotes the updategram namespace.

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

Диаграмма обновления — это шаблон с <sync> <before> блоками, и <after> , которые формируют синтаксис диаграмма обновления.An updategram is a template with <sync>, <before>, and <after> blocks that form the syntax of the 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. Более того, диаграмма обновления может иметь более одного <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). При указании нескольких <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.

Будет ли диаграмма обновления удалять, вставлять или обновлять экземпляр записи, зависит от содержимого <before> <after> блоков и:Whether an updategram deletes, inserts, or updates a record instance depends on the contents of the <before> and <after> blocks:

  • Если экземпляр записи отображается только в <before> блоке без соответствующего экземпляра в <after> блоке, диаграмма обновления выполняет операцию удаления.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. В этом случае диаграмма обновления обновляет экземпляр записи на значения, указанные в <after> блоке.In this case, the updategram updates the record instance to the values that are specified in the <after> block.

Указание сопоставления схемы в диаграмме обновленияSpecifying a Mapping Schema in the Updategram

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

В большинстве случаев диаграмма обновления, выполняющая простые обновления, не требует схемы сопоставления.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.

В следующей диаграмме обновления показано неявное сопоставление.The following updategram demonstrates implicit mapping. В этом примере диаграмма обновления применяется для вставки данных нового клиента в таблицу Sales.Customer.In this example, the updategram inserts a new customer in the Sales.Customer table. Так как в этом диаграмма обновления используется неявное сопоставление, <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), диаграмма обновления использует эту схему для определения подлежащих обновлению таблиц и столбцов базы данных.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.

Если диаграмма обновления выполняет сложное обновление (например, вставка записей в несколько таблиц на основе связи типа «родители-потомки», указанной в схеме сопоставления), необходимо явно предоставить схему сопоставления с помощью атрибута Mapping-Schema , в котором выполняется диаграмма обновления.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.

Диаграмма обновления является шаблоном, поэтому заданный в ней путь для схемы сопоставления зависит от расположения файла шаблона (является относительным).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). Дополнительные сведения см. в разделе Указание схемы сопоставления с заметками в диаграмма обновления (SQLXML 4,0).For more information, see Specifying an Annotated Mapping Schema in an Updategram (SQLXML 4.0).

Элементная и атрибутивная модель сопоставления в диаграммах обновленияElement-centric and Attribute-centric Mapping in Updategrams

При сопоставлении по умолчанию (когда сопоставляемая схема не указывается в диаграмме обновления), элементы диаграммы обновления сопоставляются с таблицами и дочерними элементами (в случае элементной модели сопоставления), а атрибуты сопоставляются со столбцами (в случае атрибутивной модели сопоставления).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

В диаграмме обновления, основанной на элементах, элемент содержит дочерние элементы, обозначающие свойства этого элемента.In an element-centric updategram, an element contains child elements that denote the properties of the element. В качестве примера см. следующую диаграмму обновления.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.

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

Можно использовать сочетание элементной и атрибутивной моделей сопоставления, как показано в следующей диаграмме обновления.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. Кроме того, в этой диаграмме обновления используется неявное сопоставление.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, но не допустимыми в XMLWorking 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 означает шестнадцатеричный код 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 (шестнадцатеричный код из четырех цифр для символа пробела); Таким же именем таблица [Order Details] в SQL ServerSQL Server _x005B_Order_x0020_Details_x005Dся _ в XML.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 (]).

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

Диаграмма обновления является шаблоном, поэтому к ней применяются все механизмы обработки шаблона.Because an updategram is a template, all the processing mechanisms of a template apply to the updategram. В SQLXML 4.0 диаграмму обновления можно выполнить следующими способами: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

Вопросы безопасности диаграмма обновления (SQLXML 4,0)Updategram Security Considerations (SQLXML 4.0)