Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un updategram indica un'operazione di inserimento quando viene visualizzata un'istanza di <record nel blocco after> ma non nel blocco precedente> corrispondente<. In questo caso, l'updategram inserisce il record nel <blocco after> nel database.
Questo è il formato updategram per un'operazione di inserimento:
<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>
<prima> del blocco
Il <blocco before> può essere omesso per un'operazione di inserimento. Se l'attributo facoltativo mapping-schema non viene specificato, l'elemento< 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.
<dopo> blocco
È possibile specificare uno o più record nel <blocco after> .
Se il <blocco after> 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 Microsoft SQL Server (se specificato) a questa colonna. Se non è presente alcun valore predefinito di SQL Server e la colonna accetta un valore NULL, l'updategram imposta il valore della colonna su NULL. Se la colonna non ha un valore predefinito né accetta un valore NULL, 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 colonna di tipo IDENTITY.
Attributo updg:id
Se l'updategram inserisce solo record, l'updategram non richiede l'attributo updg:id . Per altre informazioni su , vedere Aggiornamento dei dati tramite gli updategram XML (SQLXML 4.0).For more information about , see Updating Data Using XML Updategrams (SQLXML 4.0).updg:id
attributo updg:at-identity
Quando un updategram inserisce un record in una tabella con una colonna di tipo IDENTITY, l'updategram può acquisire il valore assegnato dal sistema usando l'attributo facoltativo updg:at-identity . L'updategram può quindi usare 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 <blocco di sincronizzazione> in cui è specificato. È possibile usare questo valore in qualsiasi punto del blocco di< sincronizzazione>. 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, tenere presente quanto segue:
La maggior parte degli esempi usa 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).
La maggior parte degli esempi usa il database di esempio AdventureWorks2012 . Tutti gli aggiornamenti vengono applicati alle tabelle di questo database.
Un. Inserimento di un record tramite un updategram
Questo updategram incentrato sugli attributi inserisce un record nella tabella HumanResources.Employee nel database AdventureWorks2012 .
In questo esempio l'updategram non specifica uno schema di mapping. Pertanto, l'updategram usa il mapping predefinito, in cui il nome dell'elemento esegue il mapping a un nome di tabella e gli attributi o gli elementi figlio eseguono il mapping alle colonne di tale tabella.
Lo schema AdventureWorks2012 per la tabella HumanResources.Department impone una restrizione "non Null" per tutte le colonne. Pertanto, l'updategram deve includere valori specificati per tutte le colonne. DepartmentID è una colonna di tipo IDENTITY. Di conseguenza, 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>
Per testare una query Xpath di esempio sullo schema
Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come MyUpdategram.xml.
Creare e utilizzare 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 è 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 elementi e incentrato sugli attributi), un elemento può avere sia attributi che sottoelementi, come illustrato 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. Inserimento di più record tramite un updategram
Questo updategram aggiunge due nuovi record di spostamento alla tabella HumanResources.Shift. L'updategram non specifica il blocco facoltativo <prima> .
<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>
Per testare una query Xpath di esempio sullo schema
Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come Updategram-AddShifts.xml.
Creare e utilizzare 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 dopo> anziché un blocco per inserire i due dipendenti. Questo valore è valido e può essere codificato nel modo seguente:
<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. Utilizzo di caratteri di SQL Server validi non 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 HHHHH indica il codice UCS-2 esadecimale a quattro cifre per il carattere nell'ordine di bit più significativo.
Annotazioni
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 Order Details nel 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 Order Details è di money tipo . Per applicare la conversione del tipo appropriata (da un string tipo a un money tipo), è necessario aggiungere il simbolo di dollaro ($) come parte del valore. Se l'updategram non specifica uno schema di mapping, viene valutato il primo carattere del string valore. 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. Questo è il modo consigliato per assicurarsi che venga eseguita la conversione del tipo appropriata.
Per testare una query Xpath di esempio sullo schema
Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come UpdategramSpacesInTableName.xml.
Creare e utilizzare 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. Uso dell'attributo at-identity per recuperare il valore inserito nella colonna IDENTITY-type
L'updategram seguente inserisce due record: uno nella tabella Sales.SalesOrderHeader e un altro nella tabella Sales.SalesOrderDetail.
Innanzitutto, l'updategram aggiunge un record alla tabella Sales.SalesOrderHeader. In questa tabella la colonna SalesOrderID è una colonna di tipo IDENTITY. 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). Updategam 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 . Di seguito è riportato un updategram modificato che restituisce questo valore Identity. Questo updategram aggiunge due record di ordine e due record dettagli ordine, solo per rendere l'esempio un po'più complesso.
<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 ai seguenti, che includono 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>
Per testare una query Xpath di esempio sullo schema
Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come Updategram-returnId.xml.
Creare e utilizzare 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. Uso dell'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 . Di conseguenza, viene restituito il GUID generato:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<returnid>
<x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
</returnid>
</ROOT>
Per testare l'updategram
Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come Updategram-GenerateGuid.xml.
Creare queste tabelle:
USE tempdb CREATE TABLE Cust (CustID uniqueidentifier, LastName varchar(20)) CREATE TABLE CustOrder (CustID uniqueidentifier, OrderID int)Creare e utilizzare 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. Specifica di uno schema in un updategram
L'updategram in questo esempio 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 tabelle e alle colonne del database.
Lo schema seguente (CustOrderSchema.xml) descrive un <elemento CustOrder> costituito dagli attributi OrderID e EmployeeID . Per rendere lo schema più interessante, viene assegnato un valore predefinito all'attributo EmployeeID . 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 dell'attributo OrderID e EmployeeID. Non specifica il valore dell'attributo OrderType. Pertanto, l'updategram usa 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).
Per testare l'updategram
Creare questa tabella nel database tempdb :
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 sopra e incollarlo in un file di testo. Salvare il file come CustOrderUpdategram.xml nella 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.
Questo è 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. Uso dell'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, questo schema 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>
Lo schema XSD specifica nillable="true" per l'elemento <fname> . L'updategram seguente usa questo schema:
<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 <blocco after> . Pertanto, quando questo updategram viene eseguito, viene inserito un valore NULL per la colonna first_name nella tabella.
Per testare l'updategram
Creare la tabella seguente nel database 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) GOCopiare lo schema precedente e incollarlo in un file di testo. Salvare il file come StudentSchema.xml.
Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come StudentUpdategram.xml nella stessa cartella usata nel passaggio precedente per salvare StudentSchema.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. Specifica di 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, lo schema corrispondente deve anche dichiarare lo stesso spazio dei nomi e l'elemento deve appartenere a tale 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 anche dichiarare lo spazio dei nomi, come illustrato in questo schema:
Lo schema seguente (XSD-ElementHavingNamespace.xml) mostra come dichiarare l'elemento e gli attributi 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>
Per testare l'updategram
Copiare lo schema precedente e incollarlo in un file di testo. Salvare il file come XSD-ElementHavingNamespace.xml.
Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come Updategram-ElementHavingNamespace.xml nella stessa cartella usata per salvare XSD-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.
Io. Inserimento di dati in una colonna di tipo di dati XML
Il xml tipo di dati è stato introdotto in SQL Server 2005. È possibile usare updategram per inserire e aggiornare i dati archiviati nelle xml colonne del tipo di dati con le disposizioni seguenti:
Impossibile utilizzare la
xmlcolonna per identificare una riga esistente. Pertanto, non può essere incluso nellaupdg:beforesezione di un updategram.Gli spazi dei nomi inclusi nell'ambito del frammento XML inserito nella
xmlcolonna verranno mantenuti e le relative dichiarazioni dello spazio dei nomi vengono aggiunte all'elemento superiore del frammento inserito.
Ad esempio, nel seguente updategram (SampleUpdateGram.xml), l'elemento <Desc> aggiorna la colonna ProductDescription nella tabella Production>productModel nel database di esempio AdventureWorks2012 . 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-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>
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="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>
Per testare l'updategram
Copiare lo schema precedente e incollarlo in un file di testo. Salvare il file come XSD-SampleSchema.xml.
Annotazioni
Poiché gli updategram supportano il mapping predefinito, non è possibile identificare l'inizio e la fine del
xmltipo di dati. Ciò significa che è necessario uno schema di mapping durante l'inserimento o l'aggiornamento di tabelle conxmlcolonne di tipo di dati. Quando non viene specificato uno schema, SQLXML restituisce un errore che indica che una delle colonne non è presente nella tabella.Copiare l'updategram sopra e incollarlo in un file di testo. Salvare il file come SampleUpdategram.xml nella stessa cartella usata per salvare SampleSchema.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.