sql:limit-field e sql:limit-value (SQLXML 4.0)
Con il caricamento bulk XML vengono elaborate le annotazioni sql:limit-field e sql:limit-value per la relativa definizione. Per ulteriori informazioni, vedere Filtrare 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 precedenza in questo esempio come file 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 file 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 l'esempio di Microsoft Visual Basic, Scripting Edition (VBScript) seguente come file 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 riportato 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>