Aracılığıyla paylaş


Etiket Yorumlama - sql:eşleştirildi

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

XML Toplu Yükleme, XSD şemasında sql:mapped açıklamasını beklendiği gibi işler; yani, eşleme şeması herhangi bir eleman veya öznitelik için sql:mapped="false" belirtiyorsa, XML Toplu Yük ilgili veriyi ilgili sütunda saklamaya çalışmaz.

XML Toplu Yük, eşlenmemiş öğeleri ve öznitelikleri görmezden gelir (ya şemada tanımlanmadıkları için ya da XSD şemasında sql:mapped="false" ile annot edildikleri için). Eşlenmemiş tüm veriler, sql:overflow-field kullanılarak belirtilmişse, taşma sütununa gider.

Örneğin, şu XSD şemasını göz önünde bulundurun:

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

HomePhone özniteliği sql:mapped="false" belirttiği için, XML Toplu Yük bu özniteliği ilgili sütuna eşlemez. XSD şeması, XML Toplu Yük'ün bu tüketilmeyen veriyi depoladığı bir taşma sütununu (OverflowColumn) tanımlar.

Çalışan bir örnek test etmek için

  1. tempdb veritabanında aşağıdaki tabloyu oluşturun:

    USE tempdb  
    CREATE TABLE Cust  
              (CustomerID     int         PRIMARY KEY,  
               CompanyName    varchar(20) NOT NULL,  
               City           varchar(20) DEFAULT 'Seattle',  
               OverflowColumn nvarchar(200))  
    GO  
    
  2. Bu örnekte verilen şemayı SampleSchema.xmlolarak kaydedin.

  3. Aşağıdaki örnek XML verilerini SampleXMLData.xmlolarak kaydedin:

    <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. XML Toplu Yükleme çalıştırmak için, bu Microsoft Visual Basic Scripting Edition (VBScript) örneğini Sample.vbs olarak kaydedip çalıştırın:

    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  
    

Bu eşdeğer XDR şemasıdır:

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