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.
Um diagrama de atualização indica uma operação de inserção quando uma instância de registro aparece no <bloco após>, mas não no bloco anterior> correspondente<. Nesse caso, o updategram insere o registro no <bloco após> o banco de dados.
Este é o formato de updategrama 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>
<antes> de Bloquear
O <bloco anterior> 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.
<depois> de Bloquear
Você pode especificar um ou mais registros no <bloco após> .
Se o <bloco após> 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 Microsoft SQL Server (se especificado) a esta coluna. Se não houver nenhum valor padrão do SQL Server e a coluna aceitar um valor NULL, o diagrama de atualização definirá o valor da coluna como NULL. Se a coluna não tiver um valor padrão nem aceitar um valor NULL, o comando falhará e o programa 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 coluna do tipo IDENTITY.
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 diagrama de atualização insere um registro em uma tabela que tem uma coluna do tipo IDENTITY, o updategrama pode capturar o valor atribuído pelo sistema usando o atributo opcional updg:at-identity . Em seguida, o updategram pode usar esse valor em 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 <o bloco de sincronização> no qual ele é especificado. Você pode usar esse valor em qualquer lugar no <bloco de sincronização> . 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 SQLXML.
Antes de usar os exemplos de updategram, observe o seguinte:
A maioria dos exemplos usa mapeamento padrão (ou seja, nenhum esquema de mapeamento é especificado no updategram). Para obter mais exemplos de diagramas de atualização que usam esquemas de mapeamento, consulte Especificando um esquema de mapeamento anotado em um updategrama (SQLXML 4.0).
A maioria dos exemplos usa o banco de dados de exemplo AdventureWorks2012 . Todas as atualizações são aplicadas às tabelas neste banco de dados.
Um. Inserindo um registro usando um updategram
Este updategrama centrado em atributo insere um registro na tabela HumanResources.Employee no banco de dados AdventureWorks2012 .
Neste exemplo, o updategram não especifica um esquema de mapeamento. Portanto, o diagrama de atualização usa o mapeamento padrão, no qual o nome do elemento é mapeado para um nome de tabela e os atributos ou elementos filho são mapeados para colunas nessa tabela.
O esquema AdventureWorks2012 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 coluna do tipo IDENTITY. 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>
Para testar uma consulta XPath de exemplo com relação ao esquema
Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como MyUpdategram.xml.
Crie e use o script de teste 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 elementos, o updategram tem a seguinte 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 updategram de modo misto (centrado em elemento e centrado em atributo), um elemento pode ter atributos e subelementos, conforme mostrado neste updategram:
<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. Inserindo vários registros usando um updategram
Este programa de atualização adiciona dois novos registros de turno à tabela HumanResources.Shift. O updategram não especifica o opcional <antes> do bloco.
<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>
Para testar uma consulta XPath de exemplo com relação ao esquema
Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como Updategram-AddShifts.xml.
Crie e use o script de teste 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 após> separados< 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. Trabalhando 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, em que HHHH significa o código UCS-2 hexadecimal de quatro dígitos para o caractere na ordem de primeiro bit 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 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 Detalhes do Pedido 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 money tipo. Para aplicar a conversão de tipo apropriada (de um string tipo para um money tipo), 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 string valor será avaliado. Se o primeiro caractere for um sinal de dólar ($), 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. Essa é a maneira recomendada de garantir que a conversão de tipo apropriada ocorra.
Para testar uma consulta XPath de exemplo com relação ao esquema
Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como UpdategramSpacesInTableName.xml.
Crie e use o script de teste 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. Usando o atributo at-identity para recuperar o valor que foi inserido na coluna do tipo IDENTITY
O seguinte updategram insere dois registros: um na tabela Sales.SalesOrderHeader e outro na tabela Sales.SalesOrderDetail.
Primeiro, o updategram adiciona um registro à tabela Sales.SalesOrderHeader. Nesta tabela, a coluna SalesOrderID é uma coluna do tipo IDENTITY. 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). O updategam 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. Veja a seguir um updategrama revisado que retorna esse valor de identidade. (Este diagrama de atualização adiciona dois registros de pedidos e dois registros de detalhes do pedido, 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 aos seguintes, 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>
Para testar uma consulta XPath de exemplo com relação ao esquema
Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como Updategram-returnId.xml.
Crie e use o script de teste 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. Usando o atributo updg:guid para gerar um valor exclusivo
Neste exemplo, o updategram 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>
Para testar o updategram
Copie o diagrama de atualização acima 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 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. Especificando um esquema em um updategram
O updategram neste exemplo insere um registro na tabela a seguir:
CustOrder(OrderID, EmployeeID, OrderType)
Um esquema XSD é especificado neste updategram (ou seja, não há nenhum mapeamento padrão de elementos e atributos do 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 <elemento CustOrder> que consiste nos atributos OrderID e EmployeeID . Para tornar o esquema mais interessante, um valor padrão é atribuído ao atributo EmployeeID . 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>
Este diagrama de atualização insere um registro na tabela CustOrder. O diagrama de atualização especifica apenas os valores de atributo OrderID e EmployeeID. Ele não especifica o valor do atributo OrderType. Portanto, o updategram 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 updategrama (SQLXML 4.0).
Para testar o updategram
Crie esta tabela no banco de dados tempdb :
USE tempdb CREATE TABLE CustOrder( OrderID int, EmployeeID int, OrderType int)Copie o esquema acima e cole-o em um arquivo de texto. Salve o arquivo como CustOrderSchema.xml.
Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como CustOrderUpdategram.xml na mesma pasta usada na etapa anterior.
Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Esse é 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. Usando 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 <elemento fname> . O seguinte updategram 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>
O diagrama de atualização especifica xsi:nil para o <elemento fname> no <bloco após> . Portanto, quando esse diagrama de atualização é executado, um valor NULL é inserido para a coluna first_name na tabela.
Para testar o updategram
Crie a tabela a seguir no banco de dados tempdb :
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 acima e cole-o em um arquivo de texto. Salve o arquivo como StudentSchema.xml.
Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como StudentUpdategram.xml na mesma pasta usada na etapa anterior para salvar StudentSchema.xml.
Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
H. Especificando namespaces em um updategram
Em um updategram, você pode ter elementos que pertencem a um namespace declarado no mesmo elemento no updategram. 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 seguinte updategram (UpdateGram-ElementHavingNamespace.xml), o <elemento Order> 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>
Para testar o updategram
Copie o esquema acima e cole-o em um arquivo de texto. Salve o arquivo como XSD-ElementHavingNamespace.xml.
Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como Updategram-ElementHavingNamespace.xml na mesma pasta usada para salvar XSD-ElementHavingnamespace.xml.
Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Eu. Inserindo dados em uma coluna de tipo de dados XML
O xml tipo de dados foi introduzido no SQL Server 2005. Você pode usar os updategramas para inserir e atualizar dados armazenados em xml colunas de tipo de dados com as seguintes disposições:
A
xmlcoluna não pode ser usada para identificar uma linha existente. Portanto, ele não pode ser incluído naupdg:beforeseção de um updategram.Os namespaces que estão no escopo do fragmento XML inserido na
xmlcoluna serão preservados e suas declarações de namespace serão adicionadas ao elemento superior do fragmento inserido.
Por exemplo, no seguinte updategram (SampleUpdateGram.xml), o <elemento Desc> atualiza a coluna ProductDescription na tabela ProductModel production>no banco de dados de exemplo AdventureWorks2012 . O resultado deste updategram é que o conteúdo XML da coluna ProductDescription é atualizado com o conteúdo XML do <elemento Desc> .
<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-stylesheet href="ProductDescription.xsl" type="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; alumunim 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>Almuminum 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="https://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>
Para testar o updategram
Copie o esquema acima 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
xmltérmino do tipo de dados. Isso significa efetivamente que um esquema de mapeamento é necessário ao inserir ou atualizar tabelas comxmlcolunas de tipo de dados. Quando um esquema não é fornecido, SQLXML retorna um erro indicando que uma das colunas está ausente da tabela.Copie o diagrama de atualização acima e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdategram.xml na mesma pasta usada para salvar SampleSchema.xml.
Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.