Inserindo dados usando diagramas de atualização XML (SQLXML 4.0)
Um diagrama de atualização 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 diagrama de atualização insere o registro no bloco <after> do 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 bloco <before> pode ser omitido em uma operação de inserção. Se o atributo opcional mapping-schema não for especificado, o <ElementName> especificado no diagrama de atualização mapeará para uma tabela de banco de dados e os elementos filho ou atributos para as colunas da tabela.
Bloco <after>
Você pode especificar um ou mais registros no bloco <after>.
Se o bloco <after> não fornecer um valor para uma coluna em particular, o diagrama de atualização usará o valor padrão especificado no esquema anotado (se houver um esquema especificado). Se o esquema não especificar um valor padrão para a coluna, o diagrama de atualização não especificará valores explícitos para essa coluna; em vez disso, atribuirá o valor padrão Microsoft SQL Server (se especificado) a ela. Se não houver nenhum valor padrão SQL Server e a coluna aceitar um valor NULL, o diagrama de atualização 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 a uma tabela com uma coluna do tipo IDENTITY.
Atributo updg:id
Se o diagrama de atualização só estiver inserindo registros, ele não exigirá o atributo updg:id. Para obter mais informações sobre updg:id, consulte Atualizando dados que usam 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 possui uma coluna do tipo IDENTITY, o diagrama pode capturar o valor atribuído do 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 diagrama de atualização, você pode retornar o valor de identidade gerado pela especificação do atributo updg:returnid.
Atributo updg:guid
O atributo updg:guid é um atributo opcional que gera um identificador globalmente exclusivo. Esse valor permanece em escopo para o bloco <sync> inteiro no qual é especificado. Você pode usá-lo em qualquer lugar no bloco <sync>. O atributo chama a função NEWGUID()SQL Server para gerar o identificador exclusivo.
Exemplos
Para criar exemplos de funcionamento com base nos exemplos a seguir, você deve atender aos requisitos especificados em Requisitos para executar exemplos do 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 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 banco de dados de exemplo AdventureWorks2012 . Todas as atualizações são aplicadas às tabelas deste banco de dados.
A.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 AdventureWorks2012 .
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 AdventureWorks2012 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 Usando o ADO para executar consultas do 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 diagrama não especifica o bloco <before> opcional.
<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 Usando o ADO para executar consultas do SQLXML 4.0.
Outra versão deste exemplo é um diagrama de atualização 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 Order Details no banco de dados Northwind. No entanto, isso não se aplica aos caracteres XML que são identificadores válidos no SQL Server, mas não no XML. Nesse caso, use '__xHHHH__' como valor de codificação, onde HHHH representa o código UCS-2 hexadecimal de quatro dígitos do caractere na ordem do primeiro bit mais significativo.
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 nesse site da Microsoft. |
Além disso, o nome de elemento deve ser incluído dentro de colchetes ([]). Pelo fato de os caracteres [and] não serem válidos em XML, você deve codificá-los como _x005B_ e _x005D_, respectivamente. (Se você usar um esquema de mapeamento, poderá fornecer nomes de elemento que não contêm caracteres inválidos, como espaços em branco. O esquema de mapeamento faz o mapeamento necessário; portanto, você não precisa codificar 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 da tabela Order Details é do tipo money. Para aplicar a conversão de tipo apropriada (de um tipo string em um tipo money), 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 string 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 um esquema de mapeamento em que a coluna seja marcada como dt:type="fixed.14.4" ou sql:datatype="money", o cifrão ($) não será necessário e a conversão será feita 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 Usando o ADO para executar consultas do 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 diagrama de atualização usa o atributo at-identity para capturar o valor SalesOrderID atribuído como "x" (um valor de espaço reservado). O diagrama 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 Usando o ADO para executar consultas do 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 diagrama 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 diagrama 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 Usando o ADO para executar consultas do 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 é designado 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 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).
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 Usando o ADO para executar consultas do 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
Caso queira inserir um valor nulo na coluna correspondente da tabela, você pode especificar o atributo xsi:nil em um elemento de um diagrama. 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 diagrama 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 Usando o ADO para executar consultas do 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 diagrama 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 Usando o ADO para executar consultas do 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. Você pode usar diagramas de atualização para inserir e atualizar dados armazenados em colunas de tipo de dados xml com as seguintes provisões:
A coluna xml não pode ser usada para identificar uma linha existente. Portanto, ela não pode ser incluída na seção updg:before de um diagrama.
Os namespaces incluídos 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 diagrama (SampleUpdateGram.xml) a seguir, o elemento **<Desc>**atualiza a coluna ProductDescription na tabela Production>productModel do banco de dados de exemplo AdventureWorks2012 . O resultado desse diagrama é que os conteúdos XML da coluna ProductDescription são atualizados com os conteúdos 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"
>
<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 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="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 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 Pelo fato de os diagramas suportarem o mapeamento padrão, não há como identificar o começo e o fim do tipo de dados xml. Na prática, isso significa que será necessário um esquema de mapeamento durante a inserção ou atualização de 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 Usando o ADO para executar consultas do SQLXML 4.0.
Consulte também
Referência
Considerações sobre segurança para diagramas de atualização (SQLXML 4.0)