Sdílet prostřednictvím


Interpretace poznámek – sql:mapped

platí pro:SQL Serverazure SQL Database

XML Bulk Load zpracovává sql :mapped anotaci v XSD schématu podle očekávání – tedy pokud mapovací schéma specifikuje sql:mapped="false" pro jakýkoli prvek nebo atribut, XML Bulk Load se nesnaží uložit příslušná data do příslušného sloupce.

XML Bulk Load ignoruje prvky a atributy, které nejsou mapovány (buď proto, že nejsou popsány ve schématu, nebo protože jsou anotovány ve schématu XSD pomocí sql:mapped="false"). Všechna nemapovaná data jdou do sloupce přetečení, pokud je takový sloupec specifikován pomocí sql:overflow-field.

Představte si například toto 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>  

Protože atribut HomePhone specifikuje sql:mapped="false", XML Bulk Load tento atribut nemapuje na odpovídající sloupec. Schéma XSD identifikuje sloupec přetečení (OverflowColumn), do kterého XML Bulk Load ukládá tato nevyužitá data.

Pro testování pracovního vzorku

  1. Vytvořte následující tabulku v databázi 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. Uložte schéma uvedené v tomto příkladu jako SampleSchema.xml.

  3. Uložte následující ukázková XML data jako 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. Pro spuštění XML Bulk Load uložte a spustěte tento příklad Microsoft Visual Basic Scripting Edition (VBScript) jako 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  
    

Toto je ekvivalentní schéma XDR:

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