Partager via


Interprétation des annotations - sql:mapped

S’applique à : SQL ServerAzure SQL Database

Le chargement en masse XML traite l’annotation sql :mappée dans le schéma XSD comme prévu, c’est-à-dire si le schéma de mappage spécifie sql :map="false » pour n’importe quel élément ou attribut, le chargement en bloc XML ne tente pas de stocker les données associées dans la colonne correspondante.

Le chargement en masse XML ignore les éléments et attributs qui ne sont pas mappés (soit parce qu’ils ne sont pas décrits dans le schéma, soit parce qu’ils sont annotés dans le schéma XSD avec sql :map="false »). Toutes les données non mappées entrent dans la colonne de dépassement, si une telle colonne est spécifiée à l’aide de sql :overflow-field.

Considérons par exemple ce schéma XSD :

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

Étant donné que l’attribut HomePhone spécifie sql :map="false », le chargement en bloc XML ne mappe pas cet attribut à la colonne correspondante. Le schéma XSD identifie une colonne de dépassement de capacité (OverflowColumn) dans laquelle le chargement en masse XML stocke ces données non agrégées.

Pour tester un exemple fonctionnel

  1. Créez le tableau suivant dans la base de données tempdb :

    USE tempdb  
    CREATE TABLE Cust  
              (CustomerID     int         PRIMARY KEY,  
               CompanyName    varchar(20) NOT NULL,  
               City           varchar(20) DEFAULT 'Seattle',  
               OverflowColumn nvarchar(200))  
    GO  
    
  2. Enregistrez le schéma fourni dans cet exemple sous le nom SampleSchema.xml.

  3. Enregistrez l'exemple de données XML ci-après sous le nom 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. Pour exécuter le chargement en bloc XML, enregistrez et exécutez cet exemple Microsoft Visual Basic Scripting Edition (VBScript) en tant qu’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  
    

Voici le schéma XDR équivalent :

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