Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
XML Toplu Yükleme, XML giriş verilerini işler ve Microsoft SQL Server'daki uygun tablolar için kayıtlar hazırlar. XML Toplu Yükleme'deki mantık, yeni bir kaydın ne zaman oluşturulacağını, hangi alt öğe veya öznitelik değerlerinin kayıt alanlarına kopyalanacağını ve kaydın ne zaman tamamlanıp SQL Server'a gönderilmeye hazır olduğunu belirler.
XML Toplu Yükleme, tüm XML giriş verilerini belleğe yüklemez ve veri SQL Server'a gönderilmeden önce tam kayıt setleri üretmez. Bunun nedeni, XML giriş verilerinin büyük bir belge olması ve tüm belgenin belleğe yüklenmesi pahalı olmasıdır. Bunun yerine, XML Toplu Yükleme şunları yapar:
Eşleme şemasını analiz eder ve gerekli yürütme planını hazırlar.
Giriş akışındaki verilere yürütme planı uygulanır.
Bu ardışık işleme, XML giriş verilerinin belirli bir şekilde sağlanmasını önemli kılar. XML Toplu Yükleme'nin eşleme şemasını nasıl analiz ettiğini ve kayıt oluşturma sürecinin nasıl gerçekleştiğini anlamalısınız. Bu anlayışla, istediğiniz sonuçları üreten bir eşleme şeması sunabilirsiniz.
XML Toplu Yükleme, yaygın eşleme şemaları açıklamalarını (özellikle annotasyonlar kullanılarak veya varsayılan eşleme aracılığıyla örtük olarak belirtilen) ve birleştirme ilişkileri dahil olmak üzere işler.
Uyarı
Annotasyonlu XSD veya XDR eşleme şemalarına aşina olduğunuz varsayılmaktadır. Şemalar hakkında daha fazla bilgi için Açıklamalı XSD Şemalarına Giriş (SQLXML 4.0) veya Annotated XDR Şemaları (SQLXML 4.0'da kullanımdan kaldırılmıştır) bölümlerine bakınız.
Kayıt üretimini anlamak için aşağıdaki kavramları anlamak gerekir:
Bir düğümün kapsamı
Rekor Üretim Kuralı
Kayıt alt kümesi ve Anahtar Sıralama Kuralı
Kayıt Üretim Kuralına İstisnalar
Bir Düğümün Kapsamı
Bir XML belgesindeki bir düğüm (bir eleman veya öznitelik), XML Toplu Yük ile XML giriş veri akışında karşılaştığında kapsama girer. Bir element düğümü için, elemanın başlangıç etiketi elemanı kapsama alır. Bir öznitelik düğümü için, öznitelik adı bu özniteliği kapsama girer.
Bir düğüm, kendisi için daha fazla veri kalmadığında alandan ayrılır: ya son etikette (bir öğe düğümü durumunda) ya da bir özellik değerinin sonunda (bir özellik düğümü durumunda).
Rekor Üretim Kuralı
Bir düğüm (eleman veya öznitelik) kapsama girdiğinde, o düğümden bir kayıt oluşturma potansiyeli vardır. Kayıt, ilgili düğüm kapsamda olduğu sürece yaşar. Düğüm kapsam dışı olduğunda, XML Toplu Yükleme oluşturulan kaydı (veri ile birlikte) tamamlanmış sayar ve SQL Server'a ekleme için gönderir.
Örneğin, aşağıdaki XSD şema parçasını ele alalım:
<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, CustomerID ve CompanyName özelliklerine sahip bir <Müşteri> öğesi belirtir. sql:relation annotasyonu, Müşteri> öğesini< Müşteriler tablosuna eşler.
Bir XML belgesinin bu parçasını ele alalım:
<Customer CustomerID="1" CompanyName="xyz" />
<Customer CustomerID="2" CompanyName="abc" />
...
XML Toplu Yük, önceki paragraflarda tanımlanan şema ve XML veri girdi olarak sağlandığında, kaynak verideki düğümleri (elemanlar ve öznitelikleri) aşağıdaki şekilde işler:
İlk <Müşteri> öğesinin başlangıç etiketi, bu unsuru kapsama dahil eder. Bu düğüm, Müşteriler tablosuna eşlenir. Bu nedenle, XML Toplu Yük Müşteriler tablosu için bir kayıt oluşturur.
Şemada, Müşteri öğesinin tüm öznitelikleri <Müşteriler tablosunun sütunlarıyla eşleşir.> Bu öznitelikler kapsama girdikçe, XML Toplu Yük değerlerini ana kapsam tarafından zaten oluşturulmuş müşteri kaydına kopyalar.
XML Toplu Yükleme, Müşteri> öğesinin< son etiketine ulaştığında, eleman kapsam dışı kalır. Bu durum, XML Toplu Yükleme'nin kaydı tamamlanmış saymasını ve SQL Server'a göndermesini sağlar.
XML Toplu Yükleme, sonraki her <Müşteri> öğesi için bu süreci takip eder.
Önemli
Bu modelde, son etikete ulaşıldığında (veya düğüm kapsam dışı olduğunda) bir kayıt eklendiğinden, kayıtla ilişkili tüm verileri düğümün kapsamı içinde tanımlamanız gerekir.
Kayıt alt kümesi ve anahtar sıralama kuralı
sql:relationship> kullanan< bir eşleme şeması belirttiğinizde, alt küme terimi, ilişkinin yabancı tarafında oluşturulan kayıt kümesini ifade eder. Aşağıdaki örnekte, CustOrder kayıtları yabancı tarafta, <sql:relationship'te> yer alır.
Örneğin, bir veritabanının aşağıdaki tabloları içerdiğini varsayalalım:
Cust (CustomerID, Şirket Adı, Şehir)
CustOrder (CustomerID, OrderID)
CustOrder tablosunda bulunan CustomerID, Cust tablosunda bulunan CustomerID birincil anahtarına atıfta bulunan yabancı bir anahtardır.
Şimdi, aşağıdaki annotasyonlu XSD şemasında belirtilen XML görünümünü ele alalım. Bu şema, Cust ve CustOrder tabloları arasındaki ilişkiyi belirtmek için sql:relationship> kullanır<.
<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ışma örneği oluşturma adımları aşağıda verilmiştir.
XML veri dosyasındaki bir< Müşteri> öğesi düğümü kapsama girdiğinde, XML Toplu Yükleme Cust tablosu için bir kayıt oluşturur. XML Toplu Yükleme, gerekli sütun değerlerini (CustomerID, CompanyName ve City) CustomerID<>, <CompanyName> ve <>City alt öğelerinden kopyalar; bu öğeler kapsama girdiğinde.
Bir< Order> öğesi düğümü kapsama girdiğinde, XML Toplu Yük CustOrder tablosu için bir kayıt oluşturur. XML Toplu Yükleme, OrderID özniteliğinin değerini bu kayda kopyalar. CustomerID sütunu için gereken değer, Müşteri> öğesinin<CustomerID> çocuk öğesinden elde< edilir. XML Toplu Yükleme, bu kayıt için CustomerID yabancı anahtar değerini elde etmek için sql:relationship'te<> belirtilen bilgileri kullanır; ancak CustomerID özdeliği Sipariş<> öğesinde belirtilmemişse. Genel kural, eğer övlak eleman yabancı anahtar özniteliği için bir değeri açıkça belirtirse, XML Toplu Yükleme bu değeri kullanır ve belirtilen <sql:ilişki> kullanılarak ana elemandan değeri elde etmez. Bu <Order> öğesi düğümü kapsam dışı olduğunda, XML Toplu Yükleme kaydı SQL Server'a gönderir ve ardından sonraki <tüm Order> öğe düğümlerini aynı şekilde işler.
Son olarak, Müşteri> öğesi< düğümü kapsam dışı kalır. O sırada, XML Toplu Yükleme müşteri kaydını SQL Server'a gönderir. XML Toplu Yükleme, XML veri akışındaki tüm sonraki müşteriler için bu süreci takip eder.
İşte haritalama şeması hakkında iki gözlem:
Şema "containment" kuralını karşıladığında (örneğin, müşteriyle ilişkilendirilen tüm veriler ve sipariş, ilgili <Müşteri> ve <Sipariş> öğesi düğümlerinin kapsamında tanımlanır), toplu yükleme başarılı olur.
Müşteri öğesini tanımlarken<, onun alt elemanları uygun sırayla belirtilir.> Bu durumda, CustomerID> çocuk öğesi,<Order> child öğesinden önce< belirtilir. Bu, giriş XML veri dosyasında, Sipariş> öğesi kapsama girdiğinde< yabancı anahtar değeri <olarak CustomerID> öğesi değerinin kullanılabilir olduğu anlamına gelir. Anahtar nitelikler önce belirtilir; bu "Anahtar Sıralama Kuralı"dır.
CustomerID> alt öğesini<Order> child öğesinden sonra< belirlerseniz, Order> öğesi kapsama girdiğinde< değer mevcut değildir. </Order> son etiketi okunduğunda, CustOrder tablosunun kaydı tamamlanmış sayılır ve istenen sonuç olmayan CustomerID sütunu için NULL değeriyle CustOrder tablosuna eklenir.
Çalışan bir örnek oluşturmak için
Bu örnekte verilen şemayı SampleSchema.xmlolarak kaydedin.
Şu tabloları 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)) GOAşağıdaki örnek XML giriş verilerini SampleXMLData.xmlolarak 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>XML Toplu Yükleme çalıştırmak için, aşağıdaki Microsoft Visual Basic Scripting Edition (VBScript) örneğini (BulkLoad.vbs) kaydedin ve ç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
Kayıt Üretim Kuralına İstisnalar
XML Toplu Yükleme, bir düğüm kapsama girdiğinde bir düğüm IDREF veya IDREFS tipi ise kayıt oluşturmaz. Kaydın tam bir tanımının şemanın bir noktasında bulunduğundan emin olmalısınız. dt:type="nmtokens" açıklamaları, IDREFS tipinin göz ardı edilmesi gibi göz ardı edilir.
Örneğin, Müşteri> ve Sipariş öğelerini tanımlayan< aşağıdaki XSD şemasını ele alabiliriz.>< Müşteri> öğesi,< IDREFS tipine ait bir OrderList özniteliği içerir. sql:relationship> etiketi,< müşteri ile sipariş listesi arasındaki bire bire ilişkiyi belirtir.
Şema şöyle:
<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>
Toplu Yük, IDREFS tipindeki düğümleri görmezden geldiğinden, OrderList özellik düğümü kapsama girdiğinde kayıt oluşturmaz. Bu nedenle, sipariş kayıtlarının Siparişler tablosuna eklenmesini istiyorsanız, bu emirleri şemanın bir yerinde tanımlamanız gerekir. Bu şemada, Sipariş> öğesinin< belirtilmesi, XML Toplu Yükleme'nin emir kayıtlarını Siparişler tablosuna eklemesini sağlar. Order> öğesi,< CustOrder tablosu için kaydı doldurmak için gereken tüm öznitelikleri tanımlar.
Müşteri<> öğesindeki CustomerID ve OrderID değerlerinin Sipariş> öğesindeki< değerlerle eşleştiğinden emin olmalısınız. Referans bütünlüğünü korumaktan sorumlusunuz.
Çalışan bir örnek test etmek için
Şu tabloları 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') GOBu örnekte verilen eşleme şemasını SampleSchema.xmlolarak kaydedin.
Aşağıdaki örnek XML verilerini SampleXMLData.xmlolarak 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>XML Toplu Yükleme çalıştırmak için bu VBScript örneğini (SampleVB.vbs) kaydedin ve ç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