Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Si applica a:SQL Server
Database SQL di Azure
Un updategram indica un'operazione di inserimento quando viene visualizzata un'istanza di <after> record nel blocco ma non nel blocco corrispondente <before> . In questo caso, l'updategram inserisce il record nel <after> blocco nel database.
Il formato dell'updategram per un'operazione di inserimento è il seguente:
<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>
blocco <before>
Il <before> blocco può essere omesso per un'operazione di inserimento. Se l'attributo facoltativo mapping-schema non viene specificato, l'oggetto <ElementName> specificato nell'updategram esegue il mapping a una tabella di database e gli elementi o gli attributi figlio eseguono il mapping alle colonne della tabella.
blocco <after>
È possibile specificare uno o più record nel <after> blocco.
Se il <after> blocco non fornisce un valore per una determinata colonna, l'updategram usa il valore predefinito specificato nello schema con annotazioni (se è stato specificato uno schema). Se lo schema non specifica un valore predefinito per la colonna, l'updategram non specifica alcun valore esplicito per questa colonna e assegna invece il valore predefinito di SQL Server (se specificato) a questa colonna. Se non è presente alcun valore predefinito di SQL Server e la colonna accetta un NULL valore, l'updategram imposta il valore della colonna su NULL. Se la colonna non ha un valore predefinito o accetta un NULL valore, il comando ha esito negativo e l'updategram restituisce un errore. L'attributo facoltativo updg:returnid viene usato per restituire il valore Identity generato dal sistema quando un record viene aggiunto in una tabella con una IDENTITYcolonna -type.
Attributo updg:id
Se l'updategram inserisce solo record, l'updategram non richiede l'attributo updg:id . Per altre informazioni su , vedere updg:id.
Attributo updg:at-identity
Quando un updategram inserisce un record in una tabella con una IDENTITYcolonna -type, l'updategram può acquisire il valore assegnato dal sistema usando l'attributo facoltativo updg:at-identity . L'updategram potrà quindi utilizzare questo valore nelle operazioni successive. Dopo l'esecuzione dell'updategram, è possibile restituire il valore Identity generato specificando l'attributo updg:returnid .
Attributo updg:guid
L'attributo updg:guid è un attributo facoltativo che genera un identificatore univoco globale. Questo valore rimane nell'ambito dell'intero <sync> blocco in cui è specificato. È possibile usare questo valore in qualsiasi punto del <sync> blocco. L'attributo chiama la NEWGUID() funzione di SQL Server per generare l'identificatore univoco.
Esempi
Per creare esempi funzionanti usando gli esempi seguenti, è necessario soddisfare i requisiti specificati in Requisiti per l'esecuzione di esempi SQLXML.
Prima di usare gli esempi di updategram, prendere in considerazione:
La maggior parte degli esempi utilizza il mapping predefinito, ovvero non viene specificato alcuno schema di mapping nell'updategram. Per altri esempi di updategram che usano schemi di mapping, vedere Specifica di uno schema di mapping con annotazioni in un updategram (SQLXML 4.0).
Nella maggior parte degli esempi viene utilizzato il database di esempio
AdventureWorks2025. Tutti gli aggiornamenti vengono applicati alle tabelle di questo database.
R. Inserire un record usando un updategram
Questo updategram incentrato sugli attributi inserisce un record nella HumanResources.Employee tabella nel AdventureWorks2025 database.
In questo esempio l'updategram non specifica uno schema di mapping. pertanto utilizza il mapping predefinito nel quale il nome dell'elemento esegue il mapping a un nome di tabella e gli attributi o gli elementi figlio eseguono il mapping alle colonne della tabella stessa.
Lo schema di AdventureWorks2025 per la tabella HumanResources.Department impone una restrizione 'non null' per tutte le colonne. updategram dovrà pertanto includere i valori specificati per tutte le colonne. DepartmentID è una IDENTITYcolonna di tipo . pertanto per tale colonna non viene specificato alcun valore.
<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>
Testare una query XPath di esempio sullo schema
Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file come
MyUpdategram.xml.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire il modello.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
In un mapping incentrato sugli elementi l'updategram sarà simile al seguente:
<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>
In un updategram in modalità mista (incentrato sugli attributi e incentrato sugli elementi) un elemento può avere sia attributi sia sottoelementi, come mostrato in questo 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. Inserire più record usando un updategram
Questo updategram aggiunge due nuovi record di spostamento alla HumanResources.Shift tabella. L'updategram non specifica il blocco facoltativo <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>
Testare una query XPath di esempio sullo schema
Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file come
Updategram-AddShifts.xml.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire il modello.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
Un'altra versione di questo esempio è un updategram che usa due blocchi separati <after> anziché un blocco per inserire i due dipendenti. Questo updategram è valido e può essere codificato come segue:
<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. Usare caratteri di SQL Server validi che non sono validi in XML
In SQL Server i nomi delle tabelle possono includere uno spazio, ad esempio la tabella Dettagli ordine nel database Northwind. Tuttavia, questo non è valido nei caratteri XML che sono identificatori di SQL Server validi ma non è possibile codificare identificatori XML validi usando _xHHHH_ come valore di codifica, dove HHHH indica il codice UCS-2 esadecimale a quattro cifre per il carattere nell'ordine di bit più significativo.
Nota
In questo esempio viene utilizzato il database Northwind, È possibile installare il database Northwind usando uno script SQL disponibile per il download da questo sito Web Microsoft.
Inoltre, il nome dell'elemento deve essere racchiuso tra parentesi quadre ([ ]). Poiché i caratteri [e] non sono validi in XML, è necessario codificarli rispettivamente come _x005B_ e _x005D_. Se si usa uno schema di mapping, è possibile specificare nomi di elemento che non contengono caratteri non validi, ad esempio spazi vuoti. Lo schema di mapping esegue il mapping necessario; pertanto, non è necessario codificare per questi caratteri).
Questo updategram aggiunge un record alla tabella Dettagli ordine del database 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>
La colonna UnitPrice nella tabella Dettagli ordine è del tipo money . Per applicare la conversione del tipo appropriata (da un tipo stringa a un tipo money ), il carattere simbolo di dollaro ($) deve essere aggiunto come parte del valore. Se l'updategram non specifica uno schema di mapping, viene valutato il primo carattere del valore stringa . Se il primo carattere è un segno di dollaro ($), viene applicata la conversione appropriata.
Se l'updategram viene specificato in base a uno schema di mapping in cui la colonna è contrassegnata in modo appropriato come dt:type="fixed.14.4" o sql:datatype="money", il segno di dollaro ($) non è obbligatorio e la conversione viene gestita dal mapping. Si tratta della modalità consigliata per garantire che venga eseguita la conversione di tipo appropriata.
Testare una query XPath di esempio sullo schema
Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file come
UpdategramSpacesInTableName.xml.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire il modello.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
D. Usare l'attributo at-identity per recuperare il valore inserito nella colonna identity
L'updategram seguente inserisce due record: uno nella Sales.SalesOrderHeader tabella e un altro nella Sales.SalesOrderDetail tabella.
Innanzitutto, l'updategram aggiunge un record alla Sales.SalesOrderHeader tabella. In questa tabella la colonna SalesOrderID è una IDENTITYcolonna di tipo -. Pertanto, quando si aggiunge questo record alla tabella, l'updategram usa l'attributo at-identity per acquisire il valore SalesOrderID assegnato come "x" (un valore segnaposto). Updategram specifica quindi questa at-identity variabile come valore dell'attributo SalesOrderID nell'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 si desidera restituire il valore identity generato dall'attributo updg:at-identity , è possibile usare l'attributo updg:returnid . L'esempio seguente è un updategram modificato che restituisce questo valore Identity. Per rendere un po' più complesso questo esempio, l'updategram aggiunge due record dell'ordine e due record dei dettagli dell'ordine.
<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 viene eseguito l'updategram, restituisce risultati simili all'esempio seguente, che include il valore Identity (il valore generato della colonna ShiftID usato per l'identità della tabella) generato:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<returnid>
<x>4</x>
<y>5</y>
</returnid>
</ROOT>
Testare una query XPath di esempio sullo schema
Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file come
Updategram-returnId.xml.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire il modello.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
E. Usare l'attributo updg:guid per generare un valore univoco
In questo esempio l'updategram inserisce un record nelle tabelle Cust e CustOrder. Inoltre, l'updategram genera un valore univoco per l'attributo CustomerID usando l'attributo 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>
L'updategram specifica l'attributo returnid . Viene restituito il GUID generato:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<returnid>
<x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
</returnid>
</ROOT>
Testare l'updategram
Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file come
Updategram-GenerateGuid.xml.Creare le tabelle seguenti:
USE tempdb; CREATE TABLE Cust ( CustID UNIQUEIDENTIFIER, LastName VARCHAR (20) ); CREATE TABLE CustOrder ( CustID UNIQUEIDENTIFIER, OrderID INT );Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire il modello.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
F. Specificare uno schema in un updategram
In questo esempio l'updategram inserisce un record nella tabella seguente.
CustOrder(OrderID, EmployeeID, OrderType)
In questo updategram viene specificato uno schema XSD, ovvero non esiste alcun mapping predefinito di elementi e attributi dell'updategram. Lo schema fornisce il mapping necessario degli elementi e degli attributi alle colonne e alle tabelle di database.
Lo schema seguente (CustOrderSchema.xml) descrive un <CustOrder> elemento costituito dagli OrderID attributi e EmployeeID . Per rendere lo schema più interessante, all'attributo EmployeeID viene assegnato un valore predefinito. Un updategram usa il valore predefinito di un attributo solo per le operazioni di inserimento e quindi solo se l'updategram non specifica tale attributo.
<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>
Questo updategram inserisce un record nella tabella CustOrder. L'updategram specifica solo i valori degli attributi OrderID e EmployeeID. Non specifica il valore dell'attributo OrderType. L'updategram utilizza, pertanto, il valore predefinito dell'attributo EmployeeID specificato nello schema precedente.
<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>
Per altri esempi di updategram che specificano uno schema di mapping, vedere Specifica di uno schema di mapping con annotazioni in un updategram (SQLXML 4.0).
Testare l'updategram
Creare questa tabella nel
tempdbdatabase:USE tempdb; CREATE TABLE CustOrder ( OrderID INT, EmployeeID INT, OrderType INT );Copiare lo schema precedente e incollarlo in un file di testo. Salvare il file come
CustOrderSchema.xml.Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file come
CustOrderUpdategram.xmlnella stessa cartella usata nel passaggio precedente.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire l'updategram.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
Di seguito viene indicato lo schema 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. Usare l'attributo xsi:nil per inserire valori Null in una colonna
Se si desidera inserire un valore Null nella colonna corrispondente nella tabella, è possibile specificare l'attributo xsi:nil in un elemento in un updategram. Nello schema XSD corrispondente, è necessario specificare anche l'attributo XSD nillable .
Si consideri, ad esempio, lo schema XSD seguente:
<?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>
Lo schema XSD specifica nillable="true" per l'elemento <fname> . Questo schema viene utilizzato nell'updategram seguente.
<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>
L'updategram specifica xsi:nil per l'elemento <fname> nel <after> blocco. Pertanto, quando questo updategram viene eseguito, viene inserito un valore di NULL per la colonna first_name nella tabella.
Testare l'updategram
Creare la tabella seguente nel
tempdbdatabase: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 ); GOCopiare lo schema precedente e incollarlo in un file di testo. Salvare il file come
StudentSchema.xml.Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file come
StudentUpdategram.xmlnella stessa cartella usata nel passaggio precedente per salvareStudentSchema.xml.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire l'updategram.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
H. Specificare gli spazi dei nomi in un updategram
In un updategram è possibile avere elementi che appartengono a uno spazio dei nomi dichiarato nello stesso elemento dell'updategram. In questo caso anche lo schema corrispondente deve dichiarare lo stesso spazio dei nomi e l'elemento deve appartenere allo spazio dei nomi di destinazione.
Ad esempio, nell'updategram seguente (UpdateGram-ElementHavingNamespace.xml), l'elemento <Order> appartiene a uno spazio dei nomi dichiarato nell'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>
In questo caso lo schema deve dichiarare anche lo spazio dei nomi, come mostrato in questo schema:
Lo schema seguente (XSD-ElementHavingNamespace.xml) mostra come dichiarare gli attributi e gli elementi corrispondenti.
<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>
Testare l'updategram
Copiare lo schema precedente e incollarlo in un file di testo. Salvare il file come
XSD-ElementHavingNamespace.xml.Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file con nome
Updategram-ElementHavingNamespace.xmlnella stessa cartella usata per salvareXSD-ElementHavingnamespace.xml.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire l'updategram.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
I. Inserire dati in una colonna con tipo di dati XML
È possibile usare updategram per inserire e aggiornare i dati archiviati in colonne con tipo di dati xml con le considerazioni seguenti:
Non è possibile usare la colonna xml per identificare una riga esistente. Pertanto, non può essere incluso nella
updg:beforesezione di un updategram.Gli spazi dei nomi inclusi nell'ambito del frammento XML inserito nella colonna xml vengono mantenuti e le relative dichiarazioni dello spazio dei nomi vengono aggiunte all'elemento superiore del frammento inserito.
Ad esempio, nell'updategram seguente (SampleUpdateGram.xml), l'elemento <Desc> aggiorna la colonna ProductDescription nella tabella Production>productModel nel AdventureWorks2025 database di esempio. Il risultato di questo updategram è che il contenuto XML della colonna ProductDescription viene aggiornato con il contenuto XML dell'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 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>
L'updategram fa riferimento allo schema XSD con annotazioni seguente (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>
Testare l'updategram
Copiare lo schema precedente e incollarlo in un file di testo. Salvare il file come
XSD-SampleSchema.xml.Nota
Poiché gli updategram supportano il mapping predefinito, non è possibile identificare l'inizio e la fine del tipo di dati xml . Ciò significa che è necessario uno schema di mapping durante l'inserimento o l'aggiornamento di tabelle con colonne di tipo di dati xml . Quando non viene specificato uno schema, SQLXML restituisce un errore che indica che una delle colonne non è presente nella tabella.
Copiare l'updategram precedente e incollarlo in un file di testo. Salvare il file con nome
SampleUpdategram.xmlnella stessa cartella usata per salvareSampleSchema.xml.Creare e usare lo script di test SQLXML 4.0 (
Sqlxml4test.vbs) per eseguire l'updategram.Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.