Delen via


Aantekeningsinterpretatie - sql:gemapt

Van toepassing op:SQL ServerAzure SQL Database

XML Bulk Load verwerkt de sql:mapped-annotatie in het XSD-schema zoals verwacht – dat wil zeggen, als het mappingschema sql:mapped="false" specificeert voor een element of attribuut, probeert XML Bulk Load de bijbehorende gegevens niet in de overeenkomstige kolom op te slaan.

XML Bulk Load negeert elementen en attributen die niet zijn toegewezen (hetzij omdat ze niet in het schema worden beschreven, hetzij omdat ze in het XSD-schema zijn geannoteerd met sql:mapped="false"). Alle niet-toegewezen data gaat in de overflow-kolom, als zo'n kolom wordt gespecificeerd met sql:overflow-field.

Denk bijvoorbeeld aan dit XSD-schema:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:element name="ROOT" sql:is-constant="1">  
<xsd:complexType>  
<xsd:sequence>  
  <xsd:element name="Customers" sql:relation="Cust"  
                                sql:overflow-field="OverflowColumn" >  
   <xsd:complexType>  
       <xsd:attribute name="CustomerID"  type="xsd:integer" />  
       <xsd:attribute name="CompanyName" type="xsd:string" />  
       <xsd:attribute name="City"        type="xsd:string" />  
       <xsd:attribute name="HomePhone"   type="xsd:string"   
                                       sql:mapped="false" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:sequence>  
</xsd:complexType>  
</xsd:element>  
</xsd:schema>  

Omdat het HomePhone-attribuutsql:mapped="false" specificeert, mapt XML Bulk Load dit attribuut niet aan de overeenkomstige kolom. Het XSD-schema identificeert een overflowkolom (OverflowColumn) waarin XML Bulk Load deze niet-gebruikte data opslaat.

Om een werkmonster te testen

  1. Maak de volgende tabel aan in de tempdb-database :

    USE tempdb  
    CREATE TABLE Cust  
              (CustomerID     int         PRIMARY KEY,  
               CompanyName    varchar(20) NOT NULL,  
               City           varchar(20) DEFAULT 'Seattle',  
               OverflowColumn nvarchar(200))  
    GO  
    
  2. Sla het schema dat in dit voorbeeld wordt gegeven op als SampleSchema.xml.

  3. Sla de volgende voorbeeld-XML-gegevens op als SampleXMLData.xml:

    <ROOT>  
      <Customers CustomerID="1111" CompanyName="Sean Chai"   
                 City="NY" HomePhone="111-1111" />  
      <Customers CustomerID="1112" CompanyName="Dont Know"   
                 City="LA" HomePhone="222-2222" />  
    </ROOT>  
    
  4. Om XML Bulk Load uit te voeren, sla en voer dit voorbeeld van Microsoft Visual Basic Scripting Edition (VBScript) uit als 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.CheckConstraints=True  
    objBL.Execute "c:\SampleSchema.xml", "c:\SampleXMLData.xml"  
    set objBL=Nothing  
    

Dit is het equivalente XDR-schema:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"   
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" >   
   <ElementType name="ROOT" sql:is-constant="1">  
      <element type="Customers" />  
   </ElementType>  
   <ElementType name="Customers" sql:relation="Cust"  
                             sql:overflow-field="OverflowColumn" >  
      <AttributeType name="CustomerID" />  
      <AttributeType name="CompanyName"  />  
      <AttributeType name="City"  />  
      <AttributeType name="HomePhone" />  
      <attribute type="CustomerID"  />  
      <attribute type="CompanyName"  />  
      <attribute type="City" />  
      <attribute type="HomePhone" sql:map-field="0" />  
   </ElementType>  
</Schema>