Partilhar via


Inserir dados usando diagramas de atualização XML (SQLXML 4.0)

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

Um diagrama de atualização indica uma operação de inserção quando uma ocorrência de <after> registro aparece no bloco , mas não no bloco correspondente <before> . Nesse caso, o diagrama de atualização insere o registro no bloco no <after> banco de dados.

Este é o formato do diagrama de atualização para uma operação de inserção:

<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>

<before> bloco

O <before> bloco pode ser omitido para uma operação de inserção. Se o atributo opcional mapping-schema não for especificado, o <ElementName> especificado no diagrama de atualização será mapeado para uma tabela de banco de dados e os elementos ou atributos filho serão mapeados para colunas na tabela.

<after> bloco

Você pode especificar um ou mais registros no <after> bloco .

Se o <after> bloco não fornecer um valor para uma coluna específica, o diagrama de atualização usará o valor padrão especificado no esquema anotado (se um esquema tiver sido especificado). Se o esquema não especificar um valor padrão para a coluna, o diagrama de atualização não especificará nenhum valor explícito para essa coluna e, em vez disso, atribuirá o valor padrão do SQL Server (se especificado) a essa coluna. Se não houver nenhum valor padrão do SQL Server e a coluna aceitar um NULL valor, o diagrama de atualização definirá o valor da coluna como NULL. Se a coluna não tiver um valor padrão ou aceitar um NULL valor, o comando falhará e o diagrama de atualização retornará um erro. O atributo opcional updg:returnid é usado para retornar o valor de identidade gerado pelo sistema quando um registro é adicionado em uma tabela com uma IDENTITYcoluna -type.

Atributo updg:id

Se o diagrama de atualização estiver inserindo apenas registros, o diagrama de atualização não exigirá o updg:id atributo. Para obter mais informações sobre updg:ido , consulte Atualizando dados usando diagramas de atualização XML (SQLXML 4.0).

Atributo updg:at-identity

Quando um diagrama de atualização insere um registro em uma tabela que tem uma IDENTITYcoluna -type, o diagrama de atualização pode capturar o valor atribuído ao sistema usando o atributo opcional updg:at-identity . O diagrama de atualização pode usar esse valor em operações subsequentes. Após a execução do diagrama de atualização, você pode retornar o valor de identidade gerado especificando o updg:returnid atributo.

Atributo updg:guid

O updg:guid atributo é um atributo opcional que gera um identificador global exclusivo. Esse valor permanece no escopo de todo <sync> o bloco no qual é especificado. Você pode usar esse valor em qualquer lugar do <sync> bloco. O atributo chama a NEWGUID() função do SQL Server para gerar o identificador exclusivo.

Examples

Para criar exemplos de trabalho usando os exemplos a seguir, você deve atender aos requisitos especificados em Requisitos para execução de exemplos SQLXML.

Antes de usar os exemplos de diagrama de atualização, considere:

  • A maioria dos exemplos usa mapeamento padrão (ou seja, nenhum esquema de mapeamento é especificado no diagrama de atualização). Para obter mais exemplos de diagramas de atualização que usam esquemas de mapeamento, consulte Especificando um esquema de mapeamento anotado em um diagrama de atualização (SQLXML 4.0).

  • A maioria dos exemplos usa o AdventureWorks2025 banco de dados de exemplo. Todas as atualizações são aplicadas às tabelas neste banco de dados.

A. Inserir um registo utilizando um diagrama de atualização

Esse diagrama de atualização centrado HumanResources.Employee em atributos insere um registro na tabela do AdventureWorks2025 banco de dados.

Neste exemplo, o diagrama de atualização não especifica um esquema de mapeamento. Portanto, o diagrama de atualização usa mapeamento padrão, no qual o nome do elemento mapeia para um nome de tabela e os atributos ou elementos filho são mapeados para colunas nessa tabela.

O AdventureWorks2025 esquema para a tabela HumanResources.Department impõe uma restrição 'não nula' em todas as colunas. Portanto, o diagrama de atualização deve incluir valores especificados para todas as colunas. O DepartmentID é uma IDENTITYcoluna -type. Portanto, nenhum valor é especificado para ele.

<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>

Testar uma consulta XPath de exemplo em relação ao esquema

  1. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como MyUpdategram.xml.

  2. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Em um mapeamento centrado em elementos, o diagrama de atualização tem esta aparência:

<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>

Em um diagrama de atualização de modo misto (centrado em elementos e centrado em atributos), um elemento pode ter atributos e subelementos, conforme mostrado neste diagrama de atualização:

<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. Inserir vários registros usando um diagrama de atualização

Este diagrama de atualização adiciona dois novos registros de turno à HumanResources.Shift tabela. O diagrama de atualização não especifica o bloco 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>

Testar uma consulta XPath de exemplo em relação ao esquema

  1. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como Updategram-AddShifts.xml.

  2. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Outra versão deste exemplo é um diagrama de atualização que usa dois blocos separados <after> em vez de um bloco para inserir os dois funcionários. Isso é válido e pode ser codificado da seguinte forma:

<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. Trabalhar com caracteres válidos do SQL Server que não são válidos em XML

No SQL Server, os nomes de tabela podem incluir um espaço, como a tabela Order Details no banco de dados Northwind. No entanto, isso não é válido em caracteres XML que são identificadores válidos do SQL Server, mas não identificadores XML válidos podem ser codificados usando _xHHHH_ como o valor de codificação, onde HHHH significa o código UCS-2 hexadecimal de quatro dígitos para o caractere na ordem de bit primeiro mais significativa.

Observação

Este exemplo usa o banco de dados Northwind. Você pode instalar o banco de dados Northwind usando um script SQL disponível para download neste site da Microsoft.

Além disso, o nome do elemento deve ser colocado entre colchetes ([ ]). Como os caracteres [e] não são válidos em XML, você deve codificá-los como _x005B_ e _x005D_, respectivamente. (Se você usar um esquema de mapeamento, poderá fornecer nomes de elementos que não contenham caracteres que não sejam válidos, como espaços em branco. O esquema de mapeamento faz o mapeamento necessário; portanto, você não precisa codificar para esses caracteres).

Este diagrama de atualização adiciona um registro à tabela Order Details no banco de dados 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>

A coluna PreçoUnitário na tabela Detalhes do Pedido é do tipo dinheiro . Para aplicar a conversão de tipo apropriada (de um tipo de cadeia de caracteres para um tipo de dinheiro ), o caractere de cifrão ($) deve ser adicionado como parte do valor. Se o diagrama de atualização não especificar um esquema de mapeamento, o primeiro caractere do valor da cadeia de caracteres será avaliado. Se o primeiro caractere for um cifrão ($), a conversão apropriada será aplicada.

Se o diagrama de atualização for especificado em relação a um esquema de mapeamento em que a coluna esteja marcada adequadamente como um ou dt:type="fixed.14.4"sql:datatype="money", o cifrão ($) não será necessário e a conversão será manipulada pelo mapeamento. Esta é a maneira recomendada para garantir que a conversão de tipo apropriada ocorra.

Testar uma consulta XPath de exemplo em relação ao esquema

  1. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como UpdategramSpacesInTableName.xml.

  2. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

D. Use o atributo at-identity para recuperar o valor que foi inserido na coluna IDENTITY-type

O diagrama de atualização a seguir insere dois registros: um na Sales.SalesOrderHeader tabela e outro na Sales.SalesOrderDetail tabela.

Primeiro, o diagrama de atualização adiciona um registro à Sales.SalesOrderHeader tabela. Nesta tabela, a coluna SalesOrderID é uma IDENTITYcoluna -type. Portanto, quando você adiciona esse registro à tabela, o diagrama de atualização usa o at-identity atributo para capturar o valor SalesOrderID atribuído como "x" (um valor de espaço reservado). Em seguida, o at-identityUpdategram especifica essa < variável como o valor do atributo SalesOrderID no 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>

Se quiser retornar o valor de identidade gerado pelo updg:at-identity atributo, você pode usá-lo updg:returnid . O exemplo a seguir é um diagrama de atualização revisado que retorna esse valor de identidade. (Este diagrama de atualização adiciona dois registros de ordem e dois registros de detalhes de ordem, apenas para tornar o exemplo um pouco mais complexo.)

<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>

Quando o diagrama de atualização é executado, ele retorna resultados semelhantes ao exemplo a seguir, que inclui o valor de identidade (o valor gerado da coluna ShiftID usada para identidade da tabela) que foi gerado:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>4</x>
    <y>5</y>
  </returnid>
</ROOT>

Testar uma consulta XPath de exemplo em relação ao esquema

  1. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como Updategram-returnId.xml.

  2. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

E. Use o updg:guid atributo para gerar um valor exclusivo

Neste exemplo, o diagrama de atualização insere um registro nas tabelas Cust e CustOrder. Além disso, o diagrama de atualização gera um valor exclusivo para o atributo CustomerID usando o 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>

O diagrama de atualização especifica o returnid atributo. Como resultado, o GUID gerado é retornado:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
  </returnid>
</ROOT>

Testar o diagrama de atualização

  1. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como Updategram-GenerateGuid.xml.

  2. Crie estas tabelas:

    USE tempdb;
    
    CREATE TABLE Cust
    (
        CustID UNIQUEIDENTIFIER,
        LastName VARCHAR (20)
    );
    
    CREATE TABLE CustOrder
    (
        CustID UNIQUEIDENTIFIER,
        OrderID INT
    );
    
  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

F. Especificar um esquema em um diagrama de atualização

O diagrama de atualização neste exemplo insere um registro na tabela a seguir:

CustOrder(OrderID, EmployeeID, OrderType)

Um esquema XSD é especificado neste diagrama de atualização (ou seja, não há mapeamento padrão de elementos e atributos do diagrama de atualização). O esquema fornece o mapeamento necessário dos elementos e atributos para as tabelas e colunas do banco de dados.

O esquema a seguir (CustOrderSchema.xml) descreve um <CustOrder> elemento que consiste nos OrderID atributos e EmployeeID . Para tornar o esquema mais interessante, um valor padrão é atribuído ao EmployeeID atributo. Um diagrama de atualização usa o valor padrão de um atributo somente para operações de inserção e, em seguida, somente se o diagrama de atualização não especificar esse 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 atualização insere um registro na tabela CustOrder. O diagrama de atualização especifica apenas os valores dos atributos OrderID e EmployeeID. Ele não especifica o valor do atributo OrderType. Portanto, o diagrama de atualização usa o valor padrão do atributo EmployeeID especificado no 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 obter mais exemplos de diagramas de atualização que especificam um esquema de mapeamento, consulte Especificando um esquema de mapeamento anotado em um diagrama de atualização (SQLXML 4.0).

Testar o diagrama de atualização

  1. Crie esta tabela no tempdb banco de dados:

    USE tempdb;
    
    CREATE TABLE CustOrder
    (
        OrderID INT,
        EmployeeID INT,
        OrderType INT
    );
    
  2. Copie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como CustOrderSchema.xml.

  3. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como CustOrderUpdategram.xml na mesma pasta usada na etapa anterior.

  4. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o diagrama de atualização.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Este é o 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. Use o atributo xsi:nil para inserir valores nulos em uma coluna

Se desejar inserir um valor nulo na coluna correspondente na tabela, você pode especificar o xsi:nil atributo em um elemento em um diagrama de atualização. No esquema XSD correspondente, o atributo XSD nillable também deve ser especificado.

Por exemplo, considere 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>

O esquema XSD especifica nillable="true" para o <fname> elemento . O diagrama de atualização a seguir usa esse 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>

O diagrama de atualização especifica xsi:nil para o <fname> elemento no <after> bloco . Portanto, quando esse diagrama de atualização é executado, um valor de é inserido para a coluna first_name NULL na tabela.

Testar o diagrama de atualização

  1. Crie a seguinte tabela no tempdb banco de dados:

    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
    );
    GO
    
  2. Copie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como StudentSchema.xml.

  3. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como StudentUpdategram.xml na mesma pasta usada na etapa anterior para salvar StudentSchema.xmlo .

  4. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o diagrama de atualização.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

H. Especificar namespaces em um diagrama de atualização

Em um diagrama de atualização, você pode ter elementos que pertencem a um namespace declarados no mesmo elemento no diagrama de atualização. Nesse caso, o esquema correspondente também deve declarar o mesmo namespace e o elemento deve pertencer a esse namespace de destino.

Por exemplo, no diagrama de atualização a seguir (UpdateGram-ElementHavingNamespace.xml), o <Order> elemento pertence a um namespace declarado no 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>

Nesse caso, o esquema também deve declarar o namespace conforme mostrado neste esquema:

O esquema a seguir (XSD-ElementHavingNamespace.xml) mostra como o elemento e os atributos correspondentes devem ser declarados.

<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>

Testar o diagrama de atualização

  1. Copie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como XSD-ElementHavingNamespace.xml.

  2. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como Updategram-ElementHavingNamespace.xml na mesma pasta usada para salvar XSD-ElementHavingnamespace.xmlo .

  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o diagrama de atualização.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

I. Inserir dados em uma coluna de tipo de dados XML

Você pode usar diagramas de atualização para inserir e atualizar dados armazenados em colunas de tipo de dados xml com as seguintes considerações:

  • A coluna xml não pode ser usada para identificar uma linha existente. Portanto, ele não pode ser incluído na seção de um diagrama updg:before de atualização.

  • Os namespaces que estão no escopo do fragmento XML inserido na coluna xml são preservados e suas declarações de namespace são adicionadas ao elemento superior do fragmento inserido.

Por exemplo, no diagrama de atualização a seguir (SampleUpdateGram.xml), o <Desc> elemento atualiza a coluna ProductDescription na tabela Production>productModel no AdventureWorks2025 banco de dados de exemplo. O resultado desse diagrama de atualização é que o conteúdo XML da coluna ProductDescription é atualizado com o conteúdo XML do <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>

O diagrama de atualização refere-se ao seguinte 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>
Testar o diagrama de atualização
  1. Copie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como XSD-SampleSchema.xml.

    Observação

    Como os diagramas de atualização oferecem suporte ao mapeamento padrão, não há como identificar o início e o fim do tipo de dados xml . Isso significa efetivamente que um esquema de mapeamento é necessário ao inserir ou atualizar tabelas com colunas de tipo de dados xml . Quando um esquema não é fornecido, o SQLXML retorna um erro indicando que uma das colunas está ausente da tabela.

  2. Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdategram.xml na mesma pasta usada para salvar SampleSchema.xmlo .

  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o diagrama de atualização.

    Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.