Tolkning av anteckning – sql:mappad

gäller för:SQL ServerAzure SQL Database

XML Bulk Load behandlar sql:mapped-annotationen i XSD-schemat som förväntat – det vill säga, om mappningsschemat specificerar sql:mapped="false" för något element eller attribut, försöker XML Bulk Load inte lagra associerad data i motsvarande kolumn.

XML Bulk Load ignorerar element och attribut som inte är mappade (antingen för att de inte beskrivs i schemat, eller för att de är annoterade i XSD-schemat med sql:mapped="false"). All omappad data går in i överflödeskolumnen, om en sådan kolumn anges med sql:overflow-field.

Tänk till exempel på det här XSD-schemat:

<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>  

Eftersom HomePhone-attributet specificerar sql:mapped="false" mappar XML Bulk Load inte detta attribut till motsvarande kolumn. XSD-schemat identifierar en överflödeskolumn (OverflowColumn) där XML Bulk Load lagrar denna oanvända data.

För att testa ett fungerande prov

  1. Skapa följande tabell i tempdb-databasen :

    Note

    I Azure SQL Database och SQL-databas i Microsoft Fabric är uttalandet USE inte tillgängligt och direkta anslutningar till tempdb stöds inte. Koppla till ett önskat prov eller testdatabas och kör resten av kodprovet.

    USE tempdb  
    CREATE TABLE Cust  
              (CustomerID     int         PRIMARY KEY,  
               CompanyName    varchar(20) NOT NULL,  
               City           varchar(20) DEFAULT 'Seattle',  
               OverflowColumn nvarchar(200))  
    GO  
    
  2. Spara schemat som ges i detta exempel som SampleSchema.xml.

  3. Spara följande exempel-XML-data som 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. För att köra XML Bulk Load, spara och kör detta Microsoft VBScript (VBScript)-exempel som 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  
    

    Det här är motsvarande 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>