Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Un diagrama de actualización indica una operación de inserción cuando una instancia de registro aparece en el <after> bloque pero no en el bloque correspondiente <before> . En este caso, el diagrama de actualización inserta el registro en el <after> bloque en la base de datos.
Éste es el formato del diagrama de actualización para una operación de inserción:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync [mapping-schema="SampleSchema.xml"] >
[<updg:before>
</updg:before>]
<updg:after [updg:returnid="x y ..."] >
<ElementName [updg:id="value"]
[updg:at-identity="x"]
[updg:guid="y"]
attribute="value"
attribute="value"
...
/>
[<ElementName .../>... ]
</updg:after>
</updg:sync>
</ROOT>
Bloque de <before>
El <before> bloque se puede omitir para una operación de inserción. Si no se especifica el atributo opcional mapping-schema , el <ElementName> objeto especificado en el diagrama de actualización se asigna a una tabla de base de datos y los elementos o atributos secundarios se asignan a columnas de la tabla.
Bloque de <after>
Puede especificar uno o varios registros en el <after> bloque .
Si el <after> bloque no proporciona un valor para una columna determinada, el diagrama de actualización usa el valor predeterminado especificado en el esquema anotado (si se ha especificado un esquema). Si el esquema no especifica un valor predeterminado para la columna, el diagrama de actualización no especifica ningún valor explícito para esta columna y, en su lugar, asigna el valor predeterminado de SQL Server (si se especifica) a esta columna. Si no hay ningún valor predeterminado de SQL Server y la columna acepta un NULL valor, el diagrama de actualización establece el valor de columna en NULL. Si la columna no tiene un valor predeterminado o acepta un valor, se produce un NULL error en el comando y el diagrama de actualización devuelve un error. El atributo opcional updg:returnid se usa para devolver el valor de identidad generado por el sistema cuando se agrega un registro en una tabla con una IDENTITYcolumna -type.
updg:id Atributo
Si el diagrama de actualización solo inserta registros, el diagrama de actualización no requiere el updg:id atributo . Para obtener más información sobre updg:id, vea Actualizar datos mediante diagramas de actualización XML (SQLXML 4.0).
updg:at-identity Atributo
Cuando un diagrama de actualización inserta un registro en una tabla que tiene una IDENTITYcolumna -type, el diagrama de actualización puede capturar el valor asignado por el sistema mediante el atributo opcional updg:at-identity . El diagrama de actualización puede utilizar este valor en operaciones posteriores. Tras la ejecución del diagrama de actualización, puede devolver el valor de identidad que se genera especificando el updg:returnid atributo .
updg:guid Atributo
El updg:guid atributo es un atributo opcional que genera un identificador único global. Este valor permanece en el ámbito de todo <sync> el bloque en el que se especifica. Puede usar este valor en cualquier parte del <sync> bloque. El atributo llama a la NEWGUID() función de SQL Server para generar el identificador único.
Ejemplos
Para crear ejemplos de trabajo con los ejemplos siguientes, debe cumplir los requisitos especificados en Requisitos para ejecutar ejemplos de SQLXML.
Antes de usar los ejemplos de diagrama de actualización, tenga en cuenta lo siguiente:
En la mayoría de los ejemplos se usa una asignación predeterminada (es decir, no se especifica ningún esquema de asignación en el diagrama de actualización). Para obtener más ejemplos de diagramas de actualización que usan esquemas de asignación, vea Especificar un esquema de asignación anotado en un diagrama de actualización (SQLXML 4.0).
La mayoría de los ejemplos usan la base de datos de ejemplo
AdventureWorks2025. Todas las actualizaciones se aplican a las tablas de esta base de datos.
A Insertar un registro mediante un diagrama de actualización
Este diagrama de actualización centrado en atributos inserta un registro en la tabla de la HumanResources.EmployeeAdventureWorks2025 base de datos.
En este ejemplo, el diagrama de actualización no especifica un esquema de asignación. Por lo tanto, el diagrama de actualización usa la asignación predeterminada, en la que el nombre de elemento se asigna a un nombre de tabla y los atributos o elementos secundarios se asignan a columnas de dicha tabla.
El esquema AdventureWorks2025 para la tabla HumanResources.Department impone una restricción 'not null' en todas las columnas. Por lo tanto, el diagrama de actualización debe tener valores especificados para todas las columnas. DepartmentID es una IDENTITYcolumna de tipo . Por ello, no se especifica ningún valor para ella.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Department Name="New Product Research" GroupName="Research and Development" ModifiedDate="2010-08-31" />
</updg:after>
</updg:sync>
</ROOT>
Prueba de una consulta XPath de ejemplo en el esquema
Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
MyUpdategram.xml.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar la plantilla.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
En una asignación centrada en elementos, el diagrama de actualización presenta un aspecto como el siguiente:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Department>
<Name> New Product Research </Name>
<GroupName> Research and Development </GroupName>
<ModifiedDate>2010-08-31</ModifiedDate>
</HumanResources.Department>
</updg:after>
</updg:sync>
</ROOT>
En un diagrama de actualización de modo mixto (centrado en elementos y en atributos), un elemento puede incluir atributos y subelementos, tal y como se muestra en este diagrama de actualización:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Department Name="New Product Research">
<GroupName>Research and Development</GroupName>
<ModifiedDate>2010-08-31</ModifiedDate>
</HumanResources.Department>
</updg:after>
</updg:sync>
</ROOT>
B. Insertar varios registros mediante un diagrama de actualización
Este diagrama de actualización agrega dos nuevos registros de desplazamiento a la HumanResources.Shift tabla. El diagrama de actualización no especifica el bloque opcional <before> .
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:after>
<HumanResources.Shift Name="Day-Evening" StartTime="1900-01-01 11:00:00.000" EndTime="1900-01-01 19:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
<HumanResources.Shift Name="Evening-Night" StartTime="1900-01-01 19:00:00.000" EndTime="1900-01-01 03:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
Prueba de una consulta XPath de ejemplo en el esquema
Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
Updategram-AddShifts.xml.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar la plantilla.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
Otra versión de este ejemplo es un diagrama de actualización que usa dos bloques independientes <after> en lugar de un bloque para insertar los dos empleados. Esta versión es válida y puede codificarse del siguiente modo:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:after>
<HumanResources.Shift Name="Day-Evening" StartTime="1900-01-01 11:00:00.000" EndTime="1900-01-01 19:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Shift Name="Evening-Night" StartTime="1900-01-01 19:00:00.000" EndTime="1900-01-01 03:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
C. Trabajar con caracteres válidos de SQL Server que no son válidos en XML
En SQL Server, los nombres de tabla pueden incluir un espacio, como la tabla Detalles del pedido en la base de datos Northwind. Sin embargo, esto no es válido en caracteres XML que son identificadores de SQL Server válidos, pero no identificadores XML válidos se pueden codificar mediante _xHHHH_ como valor de codificación, donde HHHH significa el código UCS-2 hexadecimal de cuatro dígitos para el carácter en el orden de bits más significativo.
Nota:
Este ejemplo usa la base de datos de ejemplo Northwind. Puede instalar la base de datos Northwind mediante un script SQL disponible para su descarga desde este sitio web de Microsoft.
Además, el nombre del elemento debe incluirse entre corchetes ([ ]). Dado que los caracteres [y] no son válidos en XML, debe codificarlos como _x005B_ y _x005D_, respectivamente. (Si usa un esquema de asignación, puede proporcionar nombres de elemento que no contengan caracteres que no sean válidos, como espacios en blanco. El esquema de asignación realiza la asignación necesaria; por lo tanto, no es necesario codificar para estos caracteres).
Este diagrama de actualización agrega un registro a la tabla Order Details de la base de datos Northwind:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<_x005B_Order_x0020_Details_x005D_ OrderID="1" ProductID="11" UnitPrice="$1.0" Quantity="1" Discount="0.0" />
</updg:after>
</updg:sync>
</ROOT>
La columna UnitPrice de la tabla Detalles del pedido es del tipo de dinero . Para aplicar la conversión de tipo adecuada (de un tipo de cadena a un tipo money ), el carácter de signo de dólar ($) debe agregarse como parte del valor. Si el diagrama de actualización no especifica un esquema de asignación, se evalúa el primer carácter del valor de cadena . Si el primer carácter es un signo de dólar ($), se aplica la conversión adecuada.
Si el diagrama de actualización se especifica en un esquema de asignación en el que la columna se marca correctamente como dt:type="fixed.14.4" o sql:datatype="money", el signo de dólar ($) no es necesario y la conversión se controla mediante la asignación. Ésta es la forma recomendada de asegurarse de que se realice la conversión de tipos adecuada.
Prueba de una consulta XPath de ejemplo en el esquema
Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
UpdategramSpacesInTableName.xml.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar la plantilla.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
D. Use el atributo at-identity para recuperar el valor que se ha insertado en la columna IDENTITY-type.
El diagrama de actualización siguiente inserta dos registros: uno de la Sales.SalesOrderHeader tabla y otro de la Sales.SalesOrderDetail tabla.
En primer lugar, el diagrama de actualización agrega un registro a la Sales.SalesOrderHeader tabla. En esta tabla, la columna SalesOrderID es una IDENTITYcolumna -type. Por lo tanto, al agregar este registro a la tabla, el diagrama de actualización usa el at-identity atributo para capturar el valor SalesOrderID asignado como "x" (un valor de marcador de posición). El diagrama de actualización especifica esta at-identity variable como el valor del atributo SalesOrderID en el <elemento Sales.SalesOrderDetail> .
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<Sales.SalesOrderHeader updg:at-identity="x" RevisionNumber="1" OrderDate="2001-07-01 00:00:00.000" DueDate="2001-07-13 00:00:00.000" OnlineOrderFlag="0" CustomerID="676" ContactID="378" BillToAddressID="985" ShipToAddressID="985" ShipMethodID="5" SubTotal="24643.9362" TaxAmt="1971.5149" Freight="616.0984" rowguid="00001111-2222-3333-4444-556677889900" ModifiedDate="2001-07-08 00:00:00.000" />
<Sales.SalesOrderDetail SalesOrderID="x" LineNumber="1" OrderQty="1" ProductID="776" SpecialOfferID="1" UnitPrice="2429.9928" UnitPriceDiscount="0.00" rowguid="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" ModifiedDate="2001-07-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
Si desea devolver el valor de identidad generado por el updg:at-identity atributo , puede usar el updg:returnid atributo . El ejemplo siguiente es un diagrama de actualización revisado que devuelve este valor de identidad. (Este diagrama de actualización agrega dos registros de pedido y dos registros de detalles del pedido, simplemente para complicar un poco el ejemplo.)
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after updg:returnid="x y">
<HumanResources.Shift updg:at-identity="x" Name="Day-Evening" StartTime="1900-01-01 11:00:00.000" EndTime="1900-01-01 19:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
<HumanResources.Shift updg:at-identity="y" Name="Evening-Night" StartTime="1900-01-01 19:00:00.000" EndTime="1900-01-01 03:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
Cuando se ejecuta el diagrama de actualización, devuelve resultados similares al ejemplo siguiente, que incluye el valor de identidad (el valor generado de la columna ShiftID usada para la identidad de tabla) que se generó:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<returnid>
<x>4</x>
<y>5</y>
</returnid>
</ROOT>
Prueba de una consulta XPath de ejemplo en el esquema
Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
Updategram-returnId.xml.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar la plantilla.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
E. Uso del updg:guid atributo para generar un valor único
En este ejemplo, el diagrama de actualización inserta un registro en las tablas Cust y CustOrder. Además, el diagrama de actualización genera un valor único para el atributo CustomerID mediante el updg:guid atributo .
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after updg:returnid="x">
<Cust updg:guid="x">
<CustID>x</CustID>
<LastName>Fuller</LastName>
</Cust>
<CustOrder>
<CustID>x</CustID>
<OrderID>1</OrderID>
</CustOrder>
</updg:after>
</updg:sync>
</ROOT>
El diagrama de actualización especifica el returnid atributo . Como resultado, se devuelve el GUID generado:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<returnid>
<x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
</returnid>
</ROOT>
Prueba del diagrama de actualización
Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
Updategram-GenerateGuid.xml.Cree estas tablas:
USE tempdb; CREATE TABLE Cust ( CustID UNIQUEIDENTIFIER, LastName VARCHAR (20) ); CREATE TABLE CustOrder ( CustID UNIQUEIDENTIFIER, OrderID INT );Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar la plantilla.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
F. Especificar un esquema en un diagrama de actualización
El diagrama de actualización de este ejemplo inserta un registro en la tabla siguiente:
CustOrder(OrderID, EmployeeID, OrderType)
En este diagrama de actualización se especifica un esquema XSD (es decir, no hay ninguna asignación predeterminada de los elementos y atributos del diagrama de actualización). El esquema proporciona la asignación necesaria de elementos y atributos a las tablas y columnas de la base de datos.
El esquema siguiente (CustOrderSchema.xml) describe un <CustOrder> elemento que consta de los OrderID atributos y EmployeeID . Para que el esquema sea más interesante, se asigna un valor predeterminado al EmployeeID atributo . Un diagrama de actualización usa el valor predeterminado de un atributo solo para las operaciones de inserción y, a continuación, solo si el diagrama de actualización no especifica ese atributo.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="CustOrder">
<xsd:complexType>
<xsd:attribute name="OrderID" type="xsd:integer" />
<xsd:attribute name="EmployeeID" type="xsd:integer" />
<xsd:attribute name="OrderType " type="xsd:integer" default="1" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Este diagrama de actualización inserta un registro en la tabla CustOrder. El diagrama de actualización solamente especifica los valores de atributo de OrderID y EmployeeID. No especifica el valor del atributo OrderType. Por lo tanto, el diagrama de actualización utiliza el valor predeterminado del atributo OrderType especificado en el esquema anterior.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="CustOrderSchema.xml">
<updg:after>
<CustOrder OrderID="98000" EmployeeID="1" />
</updg:after>
</updg:sync>
</ROOT>
Para obtener más ejemplos de diagramas de actualización que especifican un esquema de asignación, vea Especificación de un esquema de asignación anotado en un diagrama de actualización (SQLXML 4.0).
Prueba del diagrama de actualización
Cree esta tabla en la
tempdbbase de datos:USE tempdb; CREATE TABLE CustOrder ( OrderID INT, EmployeeID INT, OrderType INT );Copie el esquema anterior y péguelo en un archivo de texto. Guarde el archivo como
CustOrderSchema.xml.Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
CustOrderUpdategram.xmlen la misma carpeta usada en el paso anterior.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar el diagrama de actualización.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
Éste es el esquema XDR equivalente:
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="CustOrder">
<AttributeType name="OrderID" />
<AttributeType name="EmployeeID" />
<AttributeType name="OrderType" default="1" />
<attribute type="OrderID" />
<attribute type="EmployeeID" />
<attribute type="OrderType" />
</ElementType>
</Schema>
G. Usar el atributo xsi:nil para insertar valores NULL en una columna
Si desea insertar un valor NULL en la columna correspondiente de la tabla, puede especificar el xsi:nil atributo en un elemento de un diagrama de actualización. En el esquema XSD correspondiente, también se debe especificar el atributo XSD nillable .
Por ejemplo, fíjese en este esquema XSD:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Student" sql:relation="Students">
<xsd:complexType>
<xsd:all>
<xsd:element name="fname" sql:field="first_name" type="xsd:string" nillable="true" />
</xsd:all>
<xsd:attribute name="SID" sql:field="StudentID" type="xsd:ID" />
<xsd:attribute name="lname" sql:field="last_name" type="xsd:string" />
<xsd:attribute name="minitial" sql:field="middle_initial" type="xsd:string" />
<xsd:attribute name="years" sql:field="no_of_years" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
El esquema XSD especifica nillable="true" para el <fname> elemento . El siguiente diagrama de actualización usa este esquema:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" xmlns:updg="urn:schemas-microsoft-com:xml-updategram" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<updg:sync mapping-schema="StudentSchema.xml">
<updg:before />
<updg:after>
<Student SID="S00004" lname="Elmaci" minitial="" years="2">
<fname xsi:nil="true">
</fname>
</Student>
</updg:after>
</updg:sync>
</ROOT>
El diagrama de actualización especifica xsi:nil para el <fname> elemento del <after> bloque . Por lo tanto, cuando se ejecuta este diagrama de actualización, se inserta un valor de NULL para la columna first_name de la tabla.
Prueba del diagrama de actualización
Cree la tabla siguiente en la
tempdbbase de datos:USE tempdb; CREATE TABLE Students ( StudentID CHAR (6) NOT NULL, first_name VARCHAR (50), last_name VARCHAR (50), middle_initial CHAR (1), no_of_years INT NULL ); GOCopie el esquema anterior y péguelo en un archivo de texto. Guarde el archivo como
StudentSchema.xml.Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
StudentUpdategram.xmlen la misma carpeta usada en el paso anterior para guardarStudentSchema.xml.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar el diagrama de actualización.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
H. Especificar espacios de nombres en un diagrama de actualización
En un diagrama de actualización, puede tener elementos que pertenecen a un espacio de nombres declarado en el mismo elemento del diagrama de actualización. En este caso, el esquema correspondiente también debe declarar el mismo espacio de nombres y el elemento debe pertenecer a este espacio de nombres de destino.
Por ejemplo, en el siguiente diagrama de actualización (UpdateGram-ElementHavingNamespace.xml), el <Order> elemento pertenece a un espacio de nombres declarado en el elemento .
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="XSD-ElementHavingNameSpace.xml">
<updg:after>
<x:Order xmlns:x="https://server/xyz/schemas/" updg:at-identity="SalesOrderID" RevisionNumber="1" OrderDate="2001-07-01 00:00:00.000" DueDate="2001-07-13 00:00:00.000" OnlineOrderFlag="0" CustomerID="676" ContactID="378" BillToAddressID="985" ShipToAddressID="985" ShipMethodID="5" SubTotal="24643.9362" TaxAmt="1971.5149" Freight="616.0984" rowguid="00009999-8888-7777-6666-554433221100" ModifiedDate="2001-07-08 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
En este caso, el esquema también debe declarar el espacio de nombres tal y como se muestra en este esquema:
El esquema siguiente (XSD-ElementHavingNamespace.xml) muestra cómo se deben declarar el elemento y los atributos correspondientes.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" xmlns:x="https://server/xyz/schemas/" targetNamespace="https://server/xyz/schemas/">
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" type="x:Order_type" />
<xsd:complexType name="Order_type">
<xsd:attribute name="SalesOrderID" type="xsd:ID" />
<xsd:attribute name="RevisionNumber" type="xsd:unsignedByte" />
<xsd:attribute name="OrderDate" type="xsd:dateTime" />
<xsd:attribute name="DueDate" type="xsd:dateTime" />
<xsd:attribute name="ShipDate" type="xsd:dateTime" />
<xsd:attribute name="Status" type="xsd:unsignedByte" />
<xsd:attribute name="OnlineOrderFlag" type="xsd:boolean" />
<xsd:attribute name="SalesOrderNumber" type="xsd:string" />
<xsd:attribute name="PurchaseOrderNumber" type="xsd:string" />
<xsd:attribute name="AccountNumber" type="xsd:string" />
<xsd:attribute name="CustomerID" type="xsd:int" />
<xsd:attribute name="ContactID" type="xsd:int" />
<xsd:attribute name="SalesPersonID" type="xsd:int" />
<xsd:attribute name="TerritoryID" type="xsd:int" />
<xsd:attribute name="BillToAddressID" type="xsd:int" />
<xsd:attribute name="ShipToAddressID" type="xsd:int" />
<xsd:attribute name="ShipMethodID" type="xsd:int" />
<xsd:attribute name="CreditCardID" type="xsd:int" />
<xsd:attribute name="CreditCardApprovalCode" type="xsd:string" />
<xsd:attribute name="CurrencyRateID" type="xsd:int" />
<xsd:attribute name="SubTotal" type="xsd:decimal" />
<xsd:attribute name="TaxAmt" type="xsd:decimal" />
<xsd:attribute name="Freight" type="xsd:decimal" />
<xsd:attribute name="TotalDue" type="xsd:decimal" />
<xsd:attribute name="Comment" type="xsd:string" />
<xsd:attribute name="rowguid" type="xsd:string" />
<xsd:attribute name="ModifiedDate" type="xsd:dateTime" />
</xsd:complexType>
</xsd:schema>
Prueba del diagrama de actualización
Copie el esquema anterior y péguelo en un archivo de texto. Guarde el archivo como
XSD-ElementHavingNamespace.xml.Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
Updategram-ElementHavingNamespace.xmlen la misma carpeta usada para guardarXSD-ElementHavingnamespace.xml.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar el diagrama de actualización.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.
I. Insertar datos en una columna de tipo de datos XML
Puede usar diagramas de actualización para insertar y actualizar datos almacenados en columnas de tipo de datos xml con las consideraciones siguientes:
La columna xml no se puede usar para identificar una fila existente. Por lo tanto, no se puede incluir en la
updg:beforesección de un diagrama de actualización.Los espacios de nombres que están en el ámbito del fragmento XML insertado en la columna xml se conservan y sus declaraciones de espacio de nombres se agregan al elemento superior del fragmento insertado.
Por ejemplo, en el siguiente diagrama de actualización (SampleUpdateGram.xml), el <Desc> elemento actualiza la columna ProductDescription en la tabla ProductModel de producción>de la AdventureWorks2025 base de datos de ejemplo. El resultado de este diagrama de actualización es que el contenido XML de la columna ProductDescription se actualiza con el contenido XML del <Desc> elemento.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleSchema.xml">
<updg:before>
<ProductModel ProductModelID="19">
<Name>Mountain-100</Name>
</ProductModel>
</updg:before>
<updg:after>
<ProductModel>
<Name>Mountain-100</Name>
<Desc>
<?xml href="ProductDescription.xsl" type="text/xsl" e="text/xsl"?>
<p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="">
<p1:Summary>
<html:p>Insert Example</html:p>
</p1:Summary>
<p1:Manufacturer>
<p1:Name>AdventureWorks</p1:Name>
<p1:Copyright>2002</p1:Copyright>
<p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>
</p1:Manufacturer>
<p1:Features>
These are the product highlights.
<wm:Warranty>
<wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
<wm:Description>parts and labor</wm:Description>
</wm:Warranty>
<wm:Maintenance>
<wm:NoOfYears>10 years</wm:NoOfYears>
<wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>
</wm:Maintenance>
<wf:wheel>High performance wheels.</wf:wheel>
<wf:saddle>
<html:i>Anatomic design</html:i>
and made from durable leather for a full-day of riding in comfort.
</wf:saddle>
<wf:pedal>
<html:b>Top-of-the-line</html:b>
clipless pedals with adjustable tension.
</wf:pedal>
<wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter and wall-thickness required of a premium mountain frame. The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame>
<wf:crankset> Triple crankset; aluminum crank arm; flawless shifting. </wf:crankset>
</p1:Features>
<p1:Picture>
<p1:Angle>front</p1:Angle>
<p1:Size>small</p1:Size>
<p1:ProductPhotoID>118</p1:ProductPhotoID>
</p1:Picture>
<p1:Specifications>
These are the product specifications.
<Material>Aluminum Alloy</Material>
<Color>Available in most colors</Color>
<ProductLine>Mountain bike</ProductLine>
<Style>Unisex</Style>
<RiderExperience>Advanced to Professional riders</RiderExperience>
</p1:Specifications>
</p1:ProductDescription>
</Desc>
</ProductModel>
</updg:after>
</updg:sync>
</ROOT>
El diagrama de actualización hace referencia al siguiente esquema XSD anotado (SampleSchema.xml).
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<xsd:element name="ProductModel" sql:relation="Production.ProductModel">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"></xsd:element>
<xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductDescription">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Summary" type="xsd:anyType">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="ProductModelID" sql:field="ProductModelID" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Prueba del diagrama de actualización
Copie el esquema anterior y péguelo en un archivo de texto. Guarde el archivo como
XSD-SampleSchema.xml.Nota:
Dado que los diagramas de actualización admiten la asignación predeterminada, no hay ninguna manera de identificar el principio y el final del tipo de datos xml . Esto significa eficazmente que se requiere un esquema de asignación al insertar o actualizar tablas con columnas de tipo de datos xml . Cuando no se proporciona un esquema, SQLXML devuelve un error que indica que falta una de las columnas de la tabla.
Copie el diagrama de actualización anterior y péguelo en un archivo de texto. Guarde el archivo como
SampleUpdategram.xmlen la misma carpeta usada para guardarSampleSchema.xml.Cree y use el script de prueba de SQLXML 4.0 (
Sqlxml4test.vbs) para ejecutar el diagrama de actualización.Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.