Introducción a los diagramas de actualización (SQLXML 4.0)Introduction to Updategrams (SQLXML 4.0)

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

Puede modificar (insertar, actualizar o eliminar) una base de datos en desde un documento XML existente mediante un diagrama de actualización MicrosoftMicrosoft SQL ServerSQL Server o la función Transact-SQLTransact-SQL OPENXML.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.

La función OPENXML modifica una base de datos dividiendo el documento XML existente y proporcionando un conjunto de filas que puede pasarse a una instrucción INSERT, UPDATE o 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. Con OPENXML, las operaciones se realizan directamente en las tablas de la base de datos.With OPENXML, operations are performed directly against the database tables. Por lo tanto, el uso de OPENXML resulta más adecuado siempre que los proveedores de conjuntos de filas, como una tabla, puedan aparecer como un origen.Therefore, OPENXML is most appropriate wherever rowset providers, such as a table, can appear as a source.

Al igual que OPENXML, un diagrama de actualización permite insertar, actualizar o eliminar datos en la base de datos; sin embargo, un diagrama de actualización funciona con las vistas XML proporcionadas por el esquema XSD (o XDR) anotado; por ejemplo, las actualizaciones se aplican a la vista XML proporcionada por el esquema de asignación.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. El esquema de asignación, a su vez, incluye la información necesaria para asignar elementos y atributos XML a las columnas y tablas de base de datos correspondientes.The mapping schema, in turn, has the necessary information to map XML elements and attributes to the corresponding database tables and columns. El diagrama de actualización usa esta información de asignación para actualizar las columnas y tablas de base de datos.The updategram uses this mapping information to update the database tables and columns.

Nota

En esta documentación se asume que está familiarizado con la compatibilidad de las plantillas y el esquema de asignación de SQL ServerSQL Server.This documentation assumes that you are familiar with templates and mapping schema support in SQL ServerSQL Server. Para obtener más información, vea Introducción a los esquemas XSD anotados (SQLXML 4.0).For more information, see Introduction to Annotated XSD Schemas (SQLXML 4.0). Para las aplicaciones heredadas que usan XDR, vea Esquemas XDR anotados (en desuso en SQLXML 4.0).For legacy applications that use XDR, see Annotated XDR Schemas (Deprecated in SQLXML 4.0).

Espacios de nombres necesarios en el diagrama de actualizaciónRequired Namespaces in the Updategram

Las palabras clave de un diagrama de actualización, como , y , existen en el espacio de nombres <sync> <before> <after> urn:schemas-microsoft-com:xml-updategram.The keywords in an updategram, such as <sync>, <before>, and <after>, exist in the urn:schemas-microsoft-com:xml-updategram namespace. Se usa un prefijo de espacio de nombres arbitrario.The namespace prefix that you use is arbitrary. En esta documentación, el prefijo updg denota el espacio de nombres del diagrama de actualización.In this documentation, the updg prefix denotes the updategram namespace.

Revisar la sintaxisReviewing Syntax

Un diagrama de actualización es una plantilla con <sync> <before> bloques , y <after> que forman la sintaxis del diagrama de actualización.An updategram is a template with <sync>, <before>, and <after> blocks that form the syntax of the updategram. El código siguiente muestra esta sintaxis en su forma más simple: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>  

Las definiciones siguientes describen el rol de cada uno de estos bloques:The following definitions describe the role of each of these blocks:

<before>
Identifica el estado existente (que también recibe el nombre de "estado before") de la instancia de registro.Identifies the existing state (also called "the before state") of the record instance.

<after>
Identifica el nuevo estado al que van a cambiarse los datos.Identifies the new state to which data is to be changed.

<sync>
Contiene los <before> <after> bloques y .Contains the <before> and <after> blocks. Un <sync> bloque puede contener más de un conjunto de <before> <after> bloques y .A <sync> block can contain more than one set of <before> and <after> blocks. Si hay más de un conjunto de bloques y , estos bloques (aunque estén vacíos) deben <before> <after> especificarse como pares.If there is more than one set of <before> and <after> blocks, these blocks (even if they are empty) must be specified as pairs. Además, un diagrama de actualización puede tener más de un <sync> bloque.Furthermore, an updategram can have more than one <sync> block. Cada bloque es una unidad de transacción (lo que significa que todo el contenido del bloque <sync> se realiza o no se hace <sync> nada).Each <sync> block is one unit of transaction (which means that either everything in the <sync> block is done or nothing is done). Si especifica varios <sync> bloques en un diagrama de actualización, el error de un <sync> bloque no afecta a los otros <sync> bloques.If you specify multiple <sync> blocks in an updategram, the failure of one <sync> block does not affect the other <sync> blocks.

Si un diagrama de actualización elimina, inserta o actualiza una instancia de registro depende del contenido de los bloques <before> <after> y :Whether an updategram deletes, inserts, or updates a record instance depends on the contents of the <before> and <after> blocks:

  • Si una instancia de registro solo aparece en el bloque sin ninguna instancia correspondiente en el bloque , el diagrama de actualización <before> realiza una operación de <after> eliminación.If a record instance appears only in the <before> block with no corresponding instance in the <after> block, the updategram performs a delete operation.

  • Si una instancia de registro solo aparece en el bloque sin ninguna instancia <after> correspondiente en el bloque , es una operación de <before> inserción.If a record instance appears only in the <after> block with no corresponding instance in the <before> block, it is an insert operation.

  • Si una instancia de registro aparece en el <before> bloque y tiene una instancia correspondiente en el bloque , es una operación de <after> actualización.If a record instance appears in the <before> block and has a corresponding instance in the <after> block, it is an update operation. En este caso, el diagrama de actualización actualiza la instancia de registro a los valores especificados en el <after> bloque .In this case, the updategram updates the record instance to the values that are specified in the <after> block.

Especificar un esquema de asignación en el diagrama de actualizaciónSpecifying a Mapping Schema in the Updategram

En un diagrama de actualización, la abstracción XML que se proporciona con un esquema de asignación (se admiten tanto esquemas XSD como esquemas XDR) puede ser implícita o explícita (es decir, un diagrama de actualización puede funcionar con o sin un esquema de asignación especificado).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). Si no especifica un esquema de asignación, el diagrama de actualización asume una asignación implícita (la asignación predeterminada), donde cada elemento del bloque o bloque se asigna a una tabla y el elemento secundario o atributo de cada elemento se asigna a una columna de la base de <before> <after> datos.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. Si especifica explícitamente un esquema de asignación, los elementos y atributos del diagrama de actualización deben coincidir con los elementos y los atributos del esquema de asignación.If you explicitly specify a mapping schema, the elements and attributes in the updategram must match the elements and attributes in the mapping schema.

Asignación implícita (predeterminada)Implicit (default) Mapping

En la mayoría de los casos, es posible que un diagrama de actualización que realiza actualizaciones simples no requiera un esquema de asignación.In most cases, an updategram that performs simple updates might not require a mapping schema. En este caso, el diagrama de actualización se basa en el esquema de asignación predeterminado.In this case, the updategram relies on the default mapping schema.

En el diagrama de actualización siguiente se muestra una asignación implícita.The following updategram demonstrates implicit mapping. En este ejemplo, el diagrama de actualización inserta un nuevo cliente en la tabla Sales.Customer.In this example, the updategram inserts a new customer in the Sales.Customer table. Dado que este diagrama de actualización usa la asignación implícita, el elemento se asigna a la tabla Sales.Customer y los atributos CustomerID y SalesPersonID se asignan a las columnas correspondientes de la <Sales.Customer> tabla 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>  

Asignación explícitaExplicit Mapping

Si especifica un esquema de asignación (ya sea XSD o XDR), el diagrama de actualización usa dicho esquema para determinar las columnas y las tablas de base de datos que van a actualizarse.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.

Si el diagrama de actualización realiza una actualización compleja (por ejemplo, insertar registros en varias tablas en función de la relación de elementos primarios y secundarios especificada en el esquema de asignación), debe proporcionar explícitamente el esquema de asignación mediante el atributo mapping-schema en el que se ejecuta el diagrama de actualización.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.

Dado que un diagrama de actualización es una plantilla, la ruta de acceso especificada para el esquema de asignación en el diagrama de actualización es relativa a la ubicación del archivo de plantilla (con respecto al lugar donde se almacena el diagrama de actualización).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). Para obtener más información, vea Especificar un esquema de asignación anotado en un diagrama de actualización (SQLXML 4.0).For more information, see Specifying an Annotated Mapping Schema in an Updategram (SQLXML 4.0).

Asignación centrada en elementos y centrada en atributos en diagramas de actualizaciónElement-centric and Attribute-centric Mapping in Updategrams

Con la asignación predeterminada (cuando el esquema de asignación no se especifica en el diagrama de actualización), los elementos del diagrama de actualización se asignan a tablas y los elementos secundarios (en el caso de la asignación centrada en elementos) y los atributos (en el caso de asignación centrada en atributos) se asignan a columnas.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.

Asignación centrada en elementosElement-centric Mapping

En un diagrama de actualización centrado en elementos, un elemento contiene elementos secundarios que denotan las propiedades del elemento.In an element-centric updategram, an element contains child elements that denote the properties of the element. Como ejemplo, consulte el diagrama de actualización siguiente.As an example, refer to the following updategram. El <Person.Contact> elemento contiene los elementos secundarios y <FirstName> <LastName> .The <Person.Contact> element contains the <FirstName> and <LastName> child elements. Estos elementos secundarios son propiedades del <Person.Contact> elemento .These child elements are properties of the <Person.Contact> element.

Dado que este diagrama de actualización no especifica un esquema de asignación, el diagrama de actualización usa la asignación implícita, donde el elemento se asigna a la tabla Person.Contact y sus elementos secundarios se asignan a las columnas FirstName y <Person.Contact> 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>  

asignación centrada en atributosAttribute-centric Mapping

En una asignación centrada en atributos, los elementos tienen atributos.In an attribute-centric mapping, the elements have attributes. El diagrama de actualización siguiente usa la asignación centrada en atributos.The following updategram uses attribute-centric mapping. En este ejemplo, el <Person.Contact> elemento consta de los atributos FirstName y LastName.In this example, the <Person.Contact> element consists of the FirstName and LastName attributes. Estos atributos son las propiedades del <Person.Contact> elemento .These attributes are the properties of the <Person.Contact> element. Como en el ejemplo anterior, este diagrama de actualización no especifica ningún esquema de asignación, por lo que se basa en la asignación implícita para asignar el elemento a la tabla Person.Contact y los atributos del elemento a las columnas respectivas de la <Person.Contact> tabla.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>  

Usar asignaciones centradas en elementos y centradas en atributosUsing Both Element-centric and Attribute-centric Mapping

Puede especificar una combinación de asignaciones centradas en elementos y asignaciones centradas en atributos, tal y como se muestra en el diagrama de actualización siguiente.You can specify a mix of element-centric and attribute-centric mapping, as shown in the following updategram. Observe que el <Person.Contact> elemento contiene un atributo y un elemento secundario.Notice that the <Person.Contact> element contains both an attribute and a child element. Asimismo, este diagrama de actualización se basa en la asignación implícita.Also, this updategram relies on implicit mapping. Por lo tanto, el atributo FirstName y el <LastName> elemento secundario se asignan a las columnas correspondientes de la tabla 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>  

Trabajar con caracteres que son válidos en SQL Server pero que no son válidos en XMLWorking with Characters Valid in SQL Server but Not Valid in XML

En SQL ServerSQL Server, los nombres de tabla pueden incluir un espacio.In SQL ServerSQL Server, table names can include a space. Sin embargo, este tipo de nombre de tabla no es válido en XML.However, this type of table name is not valid in XML.

Para codificar caracteres que son identificadores válidos pero que no son identificadores XML válidos, use "__xHHHH" como valor de codificación, donde HHHH representa el código SQL ServerSQL Server _ UCS-2 hexadecimal de cuatro dígitos para el carácter en el orden más significativo de primero en _ bits.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. Con este esquema de codificación, un carácter de espacio se reemplaza por x0020 (el código hexadecimal de cuatro dígitos para un carácter de espacio); Por lo tanto, el nombre de tabla [Order Details] en SQL ServerSQL Server se convierte _x005B_Order_x0020_Details_x005D en _ 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.

De forma similar, es posible que tenga que especificar nombres de elementos de tres partes, como <[database].[owner].[table]> .Similarly, you might need to specify three-part element names, such as <[database].[owner].[table]>. Dado que los caracteres de corchete ([ y ]) no son válidos en XML, debe especificarlo como , donde _x005B es la codificación para el corchete izquierdo ([) y _x005D es la codificación del corchete derecho <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_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 (]).

Ejecutar diagramas de actualizaciónExecuting Updategrams

Dado que un diagrama de actualización es una plantilla, todos los mecanismos de procesamiento de una plantilla se aplican al diagrama de actualización.Because an updategram is a template, all the processing mechanisms of a template apply to the updategram. Para SQLXML 4.0, puede ejecutar un diagrama de actualización de cualquiera de las siguientes formas:For SQLXML 4.0, you can execute an updategram in either of the following ways:

  • Enviándolo en un comando ADO.By submitting it in an ADO command.

  • Enviándolo como un comando OLE DB.By submitting it as an OLE DB command.

Consulte tambiénSee Also

Consideraciones de seguridad del diagrama (SQLXML 4.0)Updategram Security Considerations (SQLXML 4.0)