Inserindo dados usando diagramas de atualização XML (SQLXML 4.0)
Aplica-se a: SQL Server Banco de Dados SQL do Azure
Um updategram indica uma operação de inserção quando uma instância de registro aparece no bloco after>, mas não no bloco before> correspondente<.< Nesse caso, o updategram insere o registro no <bloco after> 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>
<antes> do Bloco
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 updategram será mapeado para uma tabela de banco de dados e os elementos ou atributos filho serão mapeados para colunas na tabela.
<após> Bloquear
Você pode especificar um ou mais registros no bloco after>.<
Se o <bloco after> não fornecer um valor para uma coluna específica, o updategram 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 updategram não especificará nenhum valor explícito para essa coluna e, em vez disso, atribuirá o valor padrão do Microsoft SQL Server (se especificado) a essa coluna. Se não houver nenhum valor padrão do SQL Server e a coluna aceitar um valor NULL, o updategram definirá o valor da coluna como NULL. Caso a coluna não tenha um valor padrão nem aceite valores NULL, o comando apresentará uma falha 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 coluna do tipo IDENTITY.
Atributo updg:id
Se o updategram estiver inserindo apenas registros, o updategram não exigirá o atributo updg:id . Para obter mais informações sobre updg:id, consulte Atualizando dados usando Updategrams XML (SQLXML 4.0).
Atributo updg:at-identity
Quando um updategram insere um registro em uma tabela que tem uma coluna do tipo IDENTITY, o updategram 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 atributo updg:returnid .
Atributo updg:guid
O atributo updg:guid é um atributo opcional que gera um identificador globalmente 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 função NEWGUID()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 diagrama de atualização, observe o seguinte:
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
AdventureWorks2022
. Todas as atualizações são aplicadas às tabelas deste banco de dados.
R. Inserindo um registro usando um diagrama de atualização
Este diagrama de atualização centrado em atributo insere um registro na tabela HumanResources.Employee do banco de dados AdventureWorks2022
.
Neste exemplo, o diagrama de atualização 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 AdventureWorks2022
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. DepartmentID é uma coluna do tipo IDENTITY. 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>
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 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. Inserindo vários registros usando um diagrama de atualização
Este diagrama de atualização adiciona dois novos registros de troca à tabela HumanResources.Shift. 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>
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 after> 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 SQL Server válidos que não são válidos no 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 representa o código UCS-2 hexadecimal de quatro dígitos para o caractere na ordem de 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 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 UnitPrice 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 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 updategram for especificado em relação a um esquema de mapeamento em que a coluna é marcada adequadamente como dt:type="fixed.14.4" ou sql:datatype="money", o cifrão ($) não será necessário e a conversão será tratada pelo mapeamento. Esse é o modo recomendado para garantir uma conversão de tipos bem-sucedida.
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 inserido na coluna do tipo IDENTITY
O diagrama de atualização a seguir insere dois registros: um na tabela Sales.SalesOrderHeader e outro na tabela Sales.SalesOrderDetail.
Primeiro, o diagrama adiciona um registro à tabela Sales.SalesOrderHeader. Nessa tabela, a coluna SalesOrderID é uma coluna do tipo IDENTITY. Portanto, quando você adiciona esse registro à tabela, o updategram usa o atributo at-identity para capturar o valor SalesOrderID atribuído como "x" (um valor de espaço reservado). Em seguida, o updategam especifica essa variável at-identity 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 atributo updg:at-identity , poderá usar o atributo updg:returnid . A seguir, é mostrado um diagrama de atualização 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 diagrama é executado, ele retorna resultados semelhantes aos mostrados a seguir, incluindo o valor de identidade (o valor gerado da coluna ShiftID usado para a identidade da tabela) 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
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 atributo updg:guid .
<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 updategram especifica o atributo returnid . 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 diagrama de atualização
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 diagrama de atualização
O diagrama deste exemplo insere um registro na seguinte tabela:
CustOrder(OrderID, EmployeeID, OrderType)
Um esquema XSD é especificado nesse diagrama (ou seja, não há nenhum mapeamento padrão dos elementos e atributos). 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 diagrama usa o valor padrão de um atributo apenas em operações de inserção e, nesse caso, só se o diagrama não especificar tal 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 de 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).
Para testar o diagrama de atualização
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 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. 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 atributo xsi:nil 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 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 updategram especifica xsi:nil para o< elemento fname> no< bloco after.> Portanto, quando esse diagrama é executado, um valor NULL é inserido na coluna first_name da tabela.
Para testar o diagrama de atualização
Crie a seguinte tabela 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) GO
Copie 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 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. Especificando namespaces em um diagrama de atualização
Em um diagrama de atualização, você pode ter elementos que pertencem a um namespace declarado no mesmo elemento do diagrama. Nesse caso, o esquema correspondente deve declarar também o mesmo namespace e o elemento deve pertencer àquele namespace de destino.
Por exemplo, no updategram a seguir (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 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>
Para testar o diagrama de atualização
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 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. Inserindo dados em uma coluna de tipo de dados XML
O tipo de dados xml foi introduzido no SQL Server 2005 (9.x). Você pode usar updategrams para inserir e atualizar dados armazenados em colunas de tipo de dados xml com as seguintes disposiçõ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 updg:before de um updategram.
Os namespaces que estão no escopo do fragmento XML inserido na coluna xml serão preservados e suas declarações de namespace serão adicionadas ao elemento superior do fragmento inserido.
Por exemplo, no updategram a seguir (SampleUpdateGram.xml), o <elemento Desc> atualiza a coluna ProductDescription na tabela Product Model de produção>no banco de dados de AdventureWorks2022
exemplo. O resultado desse 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; 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 faz referência 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>
Para testar o diagrama de atualização
Copie o esquema acima e cole-o em um arquivo de texto. Salve o arquivo como XSD-SampleSchema.xml.
Observação
Como os updategrams dão 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, SQLXML retorna um erro informando que uma das colunas da tabela está faltando.
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 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.
Confira também
Considerações sobre segurança para diagramas de atualização (SQLXML 4.0)