Aracılığıyla paylaş


Kayıt oluşturma işlemi (SQLXML 4.0)

XML toplu yükleme giriş XML verileri işler ve uygun tablolar Microsoft için kayıtları hazırlar. SQL Server. XML toplu yükleme içinde mantığı kaydının alanlarına kopyalamak için hangi alt öğe yeni bir kayıt oluşturmak veya öznitelik değerleri ve kaydın tam ve gönderilmesi hazır olduğunda belirler. SQL Server ekleme için.

XML Bulk yükü tüm XML giriş verileri belleğe yüklemek ve verileri göndermeden önce tüm kayıt kümelerini oluşturmak SQL Server. Bunun nedeni, XML giriş verilerinin büyük bir belge olabilir ve belgenin tamamını belleğe yükleme pahalı olabilir olmasıdır.Bunun yerine, XML toplu yükleme aşağıdakileri yapar:

  1. Eşleme şemada çözümler ve gerekli yürütme planı hazırlar.

  2. Yürütme planı Giriş akışı verileri uygulanır.

Sıralı bir işlem bu giriş XML verilerini belirli bir şekilde sağlamak üzere önemli hale getirir.Nasıl eşleme şeması XML toplu yükleme analiz eder ve kayıt oluşturma işlemi, teslimin nasıl anlamalısınız.Bu anlama ile XML toplu yükleme için istediğiniz sonuçlar üreten bir eşleme şeması sağlayabilir.

Ortak Eşleme şema açıklamaları (açıklamalar veya örtülü olarak varsayılan eşleme ile açıkça belirtilen), sütun ve tablo eşlemeleri de dahil olmak üzere, XML toplu yükleme işleme ve ilişkileri katılın.

Not

Açıklama eklediğiniz XSD veya XDR eşleme şemaları ile ilgili bilgi sahibi olduğunuz varsayılır.Şemaları hakkında daha fazla bilgi için bkz: Açıklama eklediğiniz XSD şemaları (SQLXML 4.0) Giriº veya Açıklama eklediğiniz XDR şemalarını, (SQLXML 4.0 kullanım dışı).

Kayıt oluşturma anlamak için aşağıdaki kavramlarını anlama gerektirir:

  • Kapsam düğüm

  • Kayıt oluşturma kural

  • Kayıt alt küme küme kümesi ve sıralama anahtar kuralı

  • Kayıt oluşturma kural özel durumları

Bir düğüm kapsam

Bir XML belgesinde BIR düğüm (öğe veya öznitelik) girer. kapsam içinde XML toplu yükleme, XML giriş veri akışında karşılaştığında.Öğe düğümü için öğenin başlangıç etiketi öğe getirir kapsam.Öznitelik adı özniteliği için öznitelik düğümü, getirir kapsam.

Bu daha fazla veri olduğunda, BIR düğüm kapsam bırakır: ya da bitiş etiketi (örneğinde öğe düğümü için) veya sonunda bir öznitelik değerini (örneğinde bir öznitelik düğümü).

Kayıt oluşturma kural

Bir düğüm (öğe veya öznitelik) kapsam girdiğinde, bu düğümü bir kayıt oluşturmak için bir potansiyel yoktur.kapsam ilişkili düğüm olduğu sürece, kaydı bulunur.Düğüm kapsam dışına çıktığında, XML toplu yükleme oluşturulan kayıt (veri ile) tam olarak nitelendirir ve gönderdiği SQL Server ekleme için.

Örneğin, aşağıdaki XSD şeması parçası 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="Customer" sql:relation="Customers" >
   <xsd:complexType>
     <xsd:attribute name="CustomerID" type="xsd:string" />
     <xsd:attribute name="CompanyName" type="xsd:string" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Şema belirtir bir <Müşteri> öğe ile MüşteriNo and Şirket adı öznitelikleri.The sql:relation annotation maps the <Customer> element to the Customers tablo.

Bu parça bir XML belgesinin göz önünde bulundurun:

<Customer CustomerID="1" CompanyName="xyz" />
<Customer CustomerID="2" CompanyName="abc" />
...

Önceki paragrafı ve XML veri giriş olarak açıklanan şema içeren XML toplu yükleme sağlandığında, kaynak verilerde düğümlerin (öğeleri ve öznitelikleri) aşağıdaki şekilde işler:

  • The start tag of the first <Customer> element brings that element in scope.Bu düğüm için müşterilerin eşleştiren tablo.Bu nedenle, XML toplu yükleme müşteriler için bir kayıt oluşturur tablo.

  • Şemadaki tüm özniteliklerini <Müşteri> öğe eşleme sütunlara müşterilerin tablo. Bu öznitelikler, kapsam girerken, XML toplu yükleme zaten üst kapsam tarafından oluşturulan müşteri kaydı değerleri kopyalar.

  • Bitiş etiketi için XML toplu yükleme ulaştığında <Müşteri> öğeyi, öğe kapsam dışında gider. Bu kayıt tam olarak düşünün ve göndermeden XML toplu yükleme neden olur SQL Server.

Bu işlem her biri için XML toplu yükleme izleyen sonraki <Müşteri> Öğe.

Important noteImportant Note:

Bu modelde, bitiş etiketi sınırına (veya düğüm kapsam dışında olduğunda), eklenen bir kayıt için tüm düğümün kapsamdaki kayıtla ilişkili verileri tanımlamalısınız.

Alt küme ve kural sıralama anahtar kaydı

Kullanan bir eşleme şeması belirttiğiniz <sql:relationship>, ilişkinin yabancı tarafında oluşturulan kayıt kümesi için alt küme küme terimi anlamına gelir. Aşağıdaki örnekte, yabancı tarafında, CustOrder kayıtları alır. <sql:relationship>.

Örneğin, aşağıdaki tabloda bir veritabanı içeren varsayalım:

  • Özel (MüşteriNo, ŞirketAdı, şehir)

  • CustOrder (MüşteriNo, SiparişNo kullanılır)

CustOrder, MüşteriNo tablo Müşt MüşteriNo birincil anahtarına başvuran yabancı anahtar olan tablo.

Şimdi, aşağıdaki ek açıklama eklenen XSD Şemasındaki belirtilen XML görünümü göz önünde bulundurun.Bu şemayı kullanır. <sql:relationship> Müşteri ve CustOrder tablolar arasındaki ilişkiyi belirlemek için .

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustCustOrder"
          parent="Cust"
          parent-key="CustomerID"
          child="CustOrder"
          child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customers" sql:relation="Cust" >
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="CustomerID"  type="xsd:integer" />
       <xsd:element name="CompanyName" type="xsd:string" />
       <xsd:element name="City"        type="xsd:string" />
       <xsd:element name="Order" 
                          sql:relation="CustOrder"
                          sql:relationship="CustCustOrder" >
         <xsd:complexType>
          <xsd:attribute name="OrderID" type="xsd:integer" />
         </xsd:complexType>
       </xsd:element>
     </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Örnek XML verileri ve çalışan bir örnek oluşturmak için bu adımları aşağıda verilmiştir.

  • Zaman bir <Müşteri> XML veri dosyasına öğe düğümü kapsam girer, XML toplu yükleme için özel bir kayıt oluşturur tablo. XML toplu yükleme sonra gerekli sütun değerlerini (MüşteriNo, şirket adı ve şehir) kopyalar <MüşteriNo>, **<Şirket adı>**ve <Şehir> alt öğe olarak bu öğeleri, kapsam içinde girin.

  • When an <Order> element node enters into scope, XML Bulk Load generates a record for the CustOrder table.XML toplu yükleme değeri kopyalar Sipariş Kimliği özniteliği bu kayda.MüşteriNo sütun alınan için gereken değeri <MüşteriNo> alt öğe <Müşteri> Öğe. XML Bulk Load uses the information that is specified in <sql:relationship> to obtain the CustomerID foreign key value for this record, unless the CustomerID attribute was specified in the <Order> element.Genel kural alt öğe açık olarak bir yabancı anahtar özniteliğinin değeri belirtiyorsa, XML toplu yükleme bu değeri kullanır ve değer üst öğesinden belirtilen kullanarak elde değil olmasıdır <sql:relationship>. Bu olarak <Sipariş> öğe düğümü kapsam dışında gider, XML toplu yükleme kayda gönderir. SQL Server ve sonra tüm sonraki işlemler <Sipariş> öğe düğümlerin aynı şekilde.

  • Son olarak, <Müşteri> öğe düğümü kapsam dışında gider. Bu sırada, müşteri kaydına XML toplu yükleme gönderir. SQL Server. XML toplu yükleme, XML veri akışındaki tüm izleyen müşteriler bu işlem izler.

Eşleme şeması hakkında iki gözlemler şunlardır:

  • Şema, "içerik" kuralın ne zaman karşılayan (örneğin, müşteri ve sipariş ile ilişkili tüm verileri tanımlanır kapsamında ilişkili <Müşteri> ve <Sipariş> öğe düğümler), toplu yükleme başarılı.

  • Tanımlama, <Müşteri> öğe, uygun sırayla belirtilen öğelerin alt. Bu durumda, <MüşteriNo> önce alt öğe belirtilen <Sipariş> alt öğe. Giriş XML veri dosyasına, yani <MüşteriNo> Öğe değeri, yabancı anahtar olarak kullanılabilir olduğunda değer <Sipariş> öğe kapsam girer. Anahtar öznitelikleri ilk belirtilir; bu "Anahtar sipariş kuralın."

    If you specify the <CustomerID> child element after the <Order> child element, the value is not available when the <Order> element enters into scope.Zaman </ Siparişi> Bitiş etiketinden sonra okuma, kayıt CustOrder tablo için tam olarak kabul edilmemektedir ve CustOrder tablosundaki MüşteriNo sütun, istenen sonucu olan bir NULL değeri ile eklenir.

Çalışan bir örnek oluşturmak için

  1. Bu örnekte, sağlanan şema SampleSchema.xml kaydedin.

  2. Bu tablo oluşturun:

    CREATE TABLE Cust (
                  CustomerID     int         PRIMARY KEY,
                  CompanyName    varchar(20) NOT NULL,
                  City           varchar(20) DEFAULT 'Seattle')
    GO
    CREATE TABLE CustOrder (
                 OrderID        int         PRIMARY KEY,
                 CustomerID     int         FOREIGN KEY REFERENCES                                          Cust(CustomerID))
    GO
    
  3. Aşağıdaki örnek XML giriş verileri SampleXMLData.xml kaydedin:

    <ROOT>
      <Customers>
        <CustomerID>1111</CustomerID>
        <CompanyName>Hanari Carnes</CompanyName>
        <City>NY</City> 
        <Order OrderID="1" />
        <Order OrderID="2" />
      </Customers>
    
      <Customers>
        <CustomerID>1112</CustomerID>
        <CompanyName>Toms Spezialitten</CompanyName>
        <City>LA</City>
        <Order OrderID="3" />
      </Customers>
      <Customers>
        <CustomerID>1113</CustomerID>
        <CompanyName>Victuailles en stock</CompanyName>
        <Order OrderID="4" />
    </Customers>
    </ROOT>
    
  4. XML toplu yükleme çalıştırmak için , kaydetmek ve aşağıdaki yürütmek Microsoft Visual Basic komut dosyası kullanan Edition (VBScript) örnek (BulkLoad.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
    

Kayıt oluşturma kural özel durumları

XML toplu yükleme, düğüm IDREF veya IDREFS türündeyse, kapsam girdiğinde, bir düğüm için bir kaydı oluşturmaz.Şemadaki bazı yerde ortaya kayıt eksiksiz bir açıklaması da emin olmanız gerekir.The dt:type="nmtokens" annotations are ignored just as the IDREFS type is ignored.

Örneğin, açıklayan aşağıdaki XSD şeması göz önünde bulundurun. <Müşteri> ve <Sipariş> öğeleri. The <Customer> element includes an OrderList öznitelik of the IDREFS type.The <sql:relationship> tag specifies the one-to-many relationship between the customer and list of orders.

Bu şema oluşur:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustCustOrder"
                 parent="Cust"
                 parent-key="CustomerID"
                 child="CustOrder"
                 child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customers" sql:relation="Cust" >
   <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="OrderList" 
                       type="xsd:IDREFS" 
                       sql:relation="CustOrder" 
                       sql:field="OrderID"
                       sql:relationship="CustCustOrder" >
    </xsd:attribute>
  </xsd:complexType>
 </xsd:element>

  <xsd:element name="Order" sql:relation="CustOrder" >
   <xsd:complexType>
    <xsd:attribute name="OrderID" type="xsd:string" />
    <xsd:attribute name="CustomerID" type="xsd:integer" />
    <xsd:attribute name="OrderDate" type="xsd:date" />
  </xsd:complexType>
 </xsd:element>
</xsd:schema>

Düğümlerin IDREFS türü toplu yükleme yoksayar çünkü olduğu hiçbir kayıt oluşturma, OrderList öznitelik düğümü kapsam girer.Bu nedenle, sipariş kayıtları siparişlere eklenmesini istediğiniz tablo, şemadaki yerlerde bu siparişlerini tanımlamak gerekir.Bu şemadaki belirtme <Sipariş> öğe, XML toplu yükleme için Siparişler tablosundaki Sipariş kayıtları ekler sağlar. The <Order> element describes all the attributes that are required to fill the record for the CustOrder tablo.

Emin olun MüşteriNo and Sipariş Kimliği değerleri**<Müşteri>** öğe eşleşen değerler <Sipariş> Öğe. Bilgi tutarlılığı korumak için sorumluluğu size aittir.

Bir çalışan örneği sınamak için

  1. Bu tablo oluşturun:

    CREATE TABLE Cust (
                  CustomerID     int          PRIMARY KEY,
                  CompanyName    varchar(20)  NOT NULL,
                  City           varchar(20)  DEFAULT 'Seattle')
    GO
    CREATE TABLE CustOrder (
                  OrderID        varchar(10) PRIMARY KEY,
                  CustomerID     int         FOREIGN KEY REFERENCES                                          Cust(CustomerID),
                  OrderDate      datetime DEFAULT '2000-01-01')
    GO
    
  2. Bu örnekte SampleSchema.xml olarak sağlanan eşleme şemada kaydedin.

  3. Aşağıdaki örnek XML verileri SampleXMLData.xml kaydedin:

    <ROOT>
      <Customers CustomerID="1111" CompanyName="Sean Chai" City="NY"
                 OrderList="Ord1 Ord2" />
      <Customers CustomerID="1112" CompanyName="Dont Know" City="LA"
                 OrderList="Ord3 Ord4" />
      <Order OrderID="Ord1" CustomerID="1111" OrderDate="1999-01-01" />
      <Order OrderID="Ord2" CustomerID="1111" OrderDate="1999-02-01" />
      <Order OrderID="Ord3" CustomerID="1112" OrderDate="1999-03-01" />
      <Order OrderID="Ord4" CustomerID="1112" OrderDate="1999-04-01" />
    </ROOT>
    
  4. XML toplu yükleme yürütmek için kaydedin ve bu VBScript örneği (SampleVB.vbs) çalıştırmak için:

    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