Interpretazione delle annotazioni - sql:limit-field e sql:limit-value
Si applica a: SQL Server database SQL di Azure
Il caricamento bulk XML elabora le annotazioni sql:limit-field e sql:limit-value in base alla relativa definizione. Per altre informazioni, vedere Applicazione di filtri ai valori tramite sql:limit-field e sql:limit-value (SQLXML 4.0).
Si supponga, ad esempio, un database contenente le tabelle seguenti:
Customer (CustomerID, CompanyName)
Addresses (CustomerID, StreetAddress, AddressType)
Un cliente può disporre di più indirizzi e a ogni indirizzo è associato un tipo di indirizzo (ad esempio, un indirizzo per la consegna o un indirizzo per la fatturazione).
Si consideri a questo punto la vista XML di tali tabelle specificata nello schema XSD con annotazioni seguente:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustAddr"
parent="Customer"
parent-key="CustomerID"
child="Address"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Customer" >
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:int" />
<xsd:attribute name="CompanyName" type="xsd:string" />
<xsd:attribute name="BillTo"
type="xsd:string"
sql:relation="Address"
sql:field="StreetAddress"
sql:limit-field="AddressType"
sql:limit-value="billing"
sql:relationship="CustAddr" >
</xsd:attribute>
<xsd:attribute name="ShipTo"
type="xsd:string"
sql:relation="Address"
sql:field="StreetAddress"
sql:limit-field="AddressType"
sql:limit-value="shipping"
sql:relationship="CustAddr" >
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Alla ricezione dello schema e dei dati XML, grazie al caricamento bulk XML viene inserito il valore specificato per l'attributo BillTo nella colonna StreetAddress della tabella CustAddress insieme al valore di "fatturazione" per la colonna AddressType.
Analogamente, viene inserito il valore specificato per l'attributo ShipTo nella colonna StreetAddress insieme al valore di "consegna" nella colonna AddressType.
Per testare un esempio reale
Salvare lo schema fornito in questo esempio come SampleSchema.xml.
Creare le tabelle seguenti:
CREATE TABLE Customer( CustomerID int PRIMARY KEY, CompanyName varchar(20) NOT NULL) GO CREATE TABLE Address( CustomerID int FOREIGN KEY REFERENCES Customer(CustomerID), StreetAddress varchar(50), AddressType varchar(10)) GO
Salvare i dati di esempio seguenti come SampleXMLData.xml:
<Customer CustomerID="1111" CompanyName="Sean Chai" City="NY" BillTo="111 Maple (Billing) " ShipTo="111 Maple (Shipping)" /> <Customer CustomerID="1112" CompanyName="Dont Know" City="LA" BillTo="222 Spruce (Billing)" ShipTo="222 Spruce (Shipping)" />
Per eseguire il caricamento bulk XML, salvare ed eseguire questo esempio di Microsoft Visual Basic Scripting Edition (VBScript) come Sample.vbs:
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0") objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI" objBL.ErrorLogFile = "c:\error.log" objBL.XMLFragment = True objBL.CheckConstraints=True objBL.Execute "c:\SampleSchema.xml", "c:\SampleXMLData.xml" set objBL=Nothing
Di seguito viene indicato lo schema XDR equivalente:
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Customer" sql:relation="Customer" >
<AttributeType name="CustomerID" />
<AttributeType name="CompanyName" />
<AttributeType name="BillTo" />
<AttributeType name="ShipTo" />
<attribute type="CustomerID" />
<attribute type="CompanyName" />
<attribute type="BillTo"
sql:limit-field="AddressType"
sql:limit-value="billing"
sql:field="StreetAddress"
sql:relation="Address" >
<sql:relationship
key="CustomerID"
key-relation="Customer"
foreign-relation="Address"
foreign-key="CustomerID" />
</attribute>
<attribute type="ShipTo"
sql:limit-field="AddressType"
sql:limit-value="shipping"
sql:field="StreetAddress"
sql:relation="Address" >
<sql:relationship
key="CustomerID"
key-relation="Customer"
foreign-relation="Address"
foreign-key="CustomerID" />
</attribute>
</ElementType>
</Schema>