Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Um diagrama de atualização indica uma operação de inserção quando uma instância de registro aparece no <after> bloco, mas não no bloco correspondente <before> . Nesse caso, o updategram insere o registro no <after> bloco no banco de dados.
Este é o formato do diagrama de atualização em 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>
Bloco <before>
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 filho ou atributos serão mapeados para colunas na tabela.
Bloco <after>
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 updategrama 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 updategrama não especificará nenhum valor explícito para esta coluna e, em vez disso, atribuirá o valor padrão do SQL Server (se especificado) a esta 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 updategram estiver inserindo apenas registros, o updategram não exigirá o updg:id atributo. Para obter mais informações sobre updg:idcomo atualizar dados usando updategramas XML (SQLXML 4.0).
Atributo updg:at-identity
Quando um updategram insere um registro em uma tabela que tem uma IDENTITYcoluna de tipo, o updategrama pode capturar o valor atribuído pelo sistema usando o atributo opcional updg:at-identity . Esse valor pode ser usado em todas as operações subsequentes. Após a execução do updategram, 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 ele é especificado. Você pode usar esse valor em qualquer lugar no <sync> bloco. O atributo chama a NEWGUID() função SQL Server para gerar o identificador exclusivo.
Exemplos
Para criar exemplos de trabalho usando os exemplos a seguir, você deve atender aos requisitos especificados em Requisitos para executar exemplos de SQLXML.
Antes de usar os exemplos de updategram, 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 updategrams que usam esquemas de mapeamento, consulte Especificando um esquema de mapeamento anotado em um Updategram (SQLXML 4.0).
A maioria dos exemplos usa o banco de dados de exemplo
AdventureWorks2025. Todas as atualizações são aplicadas às tabelas deste banco de dados.
R. Inserir um registro usando um updategram
Esse updategrama centrado em atributo insere um registro na HumanResources.Employee tabela no AdventureWorks2025 banco de dados.
Neste exemplo, o updategram não especifica um esquema de mapeamento. Dessa forma, o diagrama usa o mapeamento padrão, no qual o nome do elemento é mapeado para um nome de tabela e os atributos ou elementos filho para as colunas contidas nessa tabela.
O esquema AdventureWorks2025 para a tabela HumanResources.Department impõe uma restrição 'não nulo' em todas as colunas. Portanto, o diagrama de atualização deve incluir valores especificados para todas as colunas. O DepartmentID é uma IDENTITYcoluna -type. Por isso, nenhum valor é especificado para ela.
<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 no esquema
Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
MyUpdategram.xml.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o modelo.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Em um mapeamento centrado em elemento, 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 elemento e centrado em atributo), um elemento pode ter tanto atributos como subelementos, conforme mostrado neste diagrama:
<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 updategram
Este programa de atualização adiciona dois novos registros de turno à HumanResources.Shift tabela. O updategram 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 no esquema
Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
Updategram-AddShifts.xml.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o modelo.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Outra versão deste exemplo é um updategram 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 maneira:
<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 Detalhes do Pedido 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 mais significativa do primeiro bit.
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 contêm caracteres que não são 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 UnitPrice na tabela Detalhes do Pedido é do tipo dinheiro . Para aplicar a conversão de tipo apropriada (de um tipo de cadeia de caracteres a um tipo de dinheiro ), o caractere de sinal de dólar ($) deve ser adicionado como parte do valor. Se o updategram 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 é apropriadamente marcada como dt:type="fixed.14.4" ou sql:datatype="money", o sinal de dólar ($) não é necessário e a conversão é tratada pelo mapeamento. Esse é o modo recomendado para garantir uma conversão de tipos bem-sucedida.
Testar uma consulta XPath de exemplo no esquema
Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
UpdategramSpacesInTableName.xml.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o modelo.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
D. Use o atributo at-identity para recuperar o valor que foi inserido na coluna do tipo IDENTITY
O seguinte updategram insere dois registros: um na Sales.SalesOrderHeader tabela e outro na Sales.SalesOrderDetail tabela.
Primeiro, o updategram adiciona um registro à Sales.SalesOrderHeader tabela. Nesta tabela, a coluna SalesOrderID é uma IDENTITYcoluna -type. Portanto, quando você adiciona esse registro à tabela, o updategram usa o at-identity atributo para capturar o valor SalesOrderID atribuído como "x" (um valor de espaço reservado). Em seguida, o Updategram especifica essa at-identity 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 você quiser retornar o valor de identidade gerado pelo updg:at-identity atributo, poderá usar o updg:returnid atributo. O exemplo a seguir é um updategram revisado que retorna esse valor de identidade. (Esse diagrama adiciona dois registros de pedido e dois registros de detalhe de pedido, só 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 updategram é executado, ele retorna resultados semelhantes ao exemplo a seguir, que inclui o valor de identidade (o valor gerado da coluna ShiftID usada para a 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 no esquema
Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
Updategram-returnId.xml.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o modelo.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
E. Usar o updg:guid atributo para gerar um valor exclusivo
Nesse exemplo, o diagrama de atualização insere um registro nas tabelas Cust e CustOrder. Além disso, o updategram 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 updategram
Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
Updategram-GenerateGuid.xml.Crie estas tabelas:
USE tempdb; CREATE TABLE Cust ( CustID UNIQUEIDENTIFIER, LastName VARCHAR (20) ); CREATE TABLE CustOrder ( CustID UNIQUEIDENTIFIER, OrderID INT );Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o modelo.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
F. Especificar um esquema em um updategram
O diagrama deste exemplo insere um registro na seguinte tabela:
CustOrder(OrderID, EmployeeID, OrderType)
Um esquema XSD é especificado neste updategram (ou seja, não há mapeamento padrão de elementos e atributos de updategram). 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 atributos e.OrderIDEmployeeID Para tornar o esquema mais interessante, um valor padrão é atribuído ao EmployeeID atributo. Um updategram usa o valor padrão de um atributo somente para operações de inserção e, em seguida, somente se o updategram 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>
Esse diagrama insere um registro na tabela CustOrder. O diagrama especifica apenas os valores de atributo OrderID e EmployeeID. Ele não especifica o valor do atributo OrderType. Dessa forma, o diagrama 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 updategrams que especificam um esquema de mapeamento, consulte Especificando um esquema de mapeamento anotado em um Updategram (SQLXML 4.0).
Testar o updategram
Crie esta tabela no
tempdbbanco de dados:USE tempdb; CREATE TABLE CustOrder ( OrderID INT, EmployeeID INT, OrderType INT );Copie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como
CustOrderSchema.xml.Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
CustOrderUpdategram.xmlna mesma pasta usada na etapa anterior.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o diagrama de atualização.Para obter mais informações, consulte Usar 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. Usar o atributo xsi:nil para inserir valores nulos em uma coluna
Se você quiser inserir um valor nulo na coluna correspondente na tabela, poderá especificar o xsi:nil atributo em um elemento em um updategram. 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 seguinte diagrama 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 é NULL inserido para a coluna first_name na tabela.
Testar o updategram
Crie a tabela a
tempdbseguir no 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 ); GOCopie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como
StudentSchema.xml.Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
StudentUpdategram.xmlna mesma pasta usada na etapa anterior para salvarStudentSchema.xml.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o diagrama de atualização.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
H. Especificar namespaces em um programa de atualização
Em um updategram, você pode ter elementos que pertencem a um namespace declarado no mesmo elemento no updategram. Nesse caso, o esquema correspondente deve declarar também o mesmo namespace e o elemento deve pertencer àquele namespace de destino.
Por exemplo, no seguinte updategram (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 deve declarar também o namespace como 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 updategram
Copie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como
XSD-ElementHavingNamespace.xml.Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
Updategram-ElementHavingNamespace.xmlna mesma pasta usada para salvarXSD-ElementHavingnamespace.xml.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o diagrama de atualização.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
I. Inserir dados em uma coluna de tipo de dados XML
Você pode usar os updategramas 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
updg:beforeseção de um updategram.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 seguinte updategram (SampleUpdateGram.xml), o <Desc> elemento atualiza a coluna ProductDescription na tabela ProductModel production>no AdventureWorks2025 banco de dados de exemplo. O resultado deste updategram é 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 updategram
Copie o esquema anterior e cole-o em um arquivo de texto. Salve o arquivo como
XSD-SampleSchema.xml.Observação
Como os updategramas dão suporte ao mapeamento padrão, não há como identificar o início e o término 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, SQLXML retorna um erro que indica que uma das colunas está ausente da tabela.
Copie o diagrama de atualização anterior e cole-o em um arquivo de texto. Salve o arquivo como
SampleUpdategram.xmlna mesma pasta usada para salvarSampleSchema.xml.Crie e use o Script de Teste do SQLXML 4.0 (
Sqlxml4test.vbs) para executar o diagrama de atualização.Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.