Kayıt oluşturma işlemi (SQLxml 4.0)
xml Bulk Load xml giriş verileri işler ve kayıtları Microsoft uygun tabloları hazırlar SQL Server.xml Bulk Load mantığı ne zaman yeni bir kayıt oluşturmak ne alanlara kayıt ve kayıt olduğunda kopyalamak için alt öðe ya da öznitelik değerleri tamamlamak için gönderilmek üzere hazır belirler ve SQL Server ekleme.
xml Bulk yükü tüm xml giriş verileri belleğe yüklemek ve veri göndermeden önce tam kayıt kümeleri üretmek SQL Server.Giriş xml verilerinin büyük bir belge olabilir ve bellekteki tüm belgeyi yüklemeyi pahalı olabilir çünkü budur.Bunun yerine, xml Bulk Load aşağıdakileri yapar:
Eşleme şema inceler ve gerekli yürütme planı hazırlar.
Veri yürütme planı uygulanır giriş akışı.
Bu sıralı işlem giriş xml verilerini belirli bir şekilde sağlamak önemli hale getirir.Eşleme şema xml Bulk Load nasıl analiz eder ve kayıt oluşturma işleminin nasıl gerçekleştirildiğini anlaması gerekir.Bu anlama ile xml Bulk Load için istediğiniz sonuçlar üreten bir eşleme şema sağlayabilir.
(Ek açıklamalar kullanılarak veya örtülü olarak varsayılan Eşleme aracılığıyla açıkça belirtilen) sütun ve Tablo eşlemeleri de dahil olmak üzere ortak eşleme şema açıklamalar xml Bulk Load işleme ve birleştirmek ilişkiler.
Not
Açıklama eklenmiş xsd veya xdr eşleme şemaları ile bilgi sahibi olduğunuz varsayılır.Şemaları hakkında daha fazla bilgi için bkz: Açıklama eklenmiş xsd şemaları (SQLxml 4.0) Giriº veya Açıklama eklenmiş xdr şemalarını (SQLxml 4.0 kullanım dışı).
Kayıt oluşturma anlama aşağıdaki kavramları anlama gerektirir:
Bir düğüm kapsamı
Kayıt oluşturma kural
Kayıt alt küme küme kümesi ve sıralama anahtarı kuralı
Kayıt oluşturma kural için özel durumlar
Bir düğüm kapsamı
Bir düğüm (öğe veya öznitelik) bir xml belgesindeki girer kapsam içine ne zaman xml Bulk Load karşılaştığında bunu xml giriş veri akışında.Bir öğe düğümü için öğenin başlangıç etiketi öğe getirir kapsam.Öznitelik adı özniteliği bir öznitelik düğümü için getirir kapsam.
Onun için daha fazla veri olduğunda bir düğüm kapsam bırakır: bitiş etiketi sırasında (içinde durum öğe düğümü) ya da sonunda, bir öznitelik değeri (içinde durum bir öznitelik düğümü).
Kayıt oluşturma kural
(Öğe veya öznitelik) bir düğüm kapsam içine girdiğinde, söz konusu düğümden bir kayıt oluşturmak için bir potansiyel vardır.Kaydın ilişkili düğüm kapsam içinde olduğu sürece yaşar.Düğüm kapsam dışına gittiğinde, xml Bulk Load oluşturulan kayıt (veri ile) tam olarak değerlendirir ve gönderdiği SQL Server ekleme.
Örneğin, aşağıdaki xsd şeması parça 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> öğesi ile CustomerID ve ŞirketAdı öznitelikleri.The sql:relation annotation maps the <Customer> element to the Customers table.
Bu parça bir xml belgesinin göz önünde bulundurun:
<Customer CustomerID="1" CompanyName="xyz" />
<Customer CustomerID="2" CompanyName="abc" />
...
xml Bulk Load önceki paragrafları ve xml veri giriş olarak açıklanan şema sağlandığında, kaynak verilerdeki düğümleri (öğeler ve öznitelikler) şu şekilde işler:
The start tag of the first <Customer> element brings that element in scope.Bu düğüm müşterilerine eşler tablo.Bu nedenle, xml Bulk Load müşteriler için bir kayıt oluşturur tablo.
Şemadaki tüm özniteliklerini <Müşteri> öğesi eşleme sütunlara müşterilerin tablo.Bu öznitelikler kapsam içine girerken, xml Bulk Load değerlerine zaten üst kapsam tarafından oluşturulan müşteri kaydı kopyalar.
xml Bulk Load için bitiş etiketi ulaştığında <Müşteri> öğesi, öğe gider, kapsam.Bu kaydın tamamını düşünün ve ona göndermek xml Bulk Load olur SQL Server.
xml Bulk Load izler bu işlem her biri için sonraki <Müşteri> öğesi.
Önemli |
---|
Bu modelde, bir bitiş etiketi sınırına (veya düğüm kapsam dışı olduğunda) kayıtın eklenmeden çünkü tüm düğüm kapsamı içinde kayıt ile ilişkili verileri tanımlamalısınız. |
Kayıt alt kümesi ve kural sıralama anahtarı
Kullanan bir eşleme şema belirtmek ne zaman <sql:relationship>, alt küme terimi belirtir yabancı tarafında ilişki. üretilen kayıt kümesi içinAşağıdaki örnekte, yabancı tarafında CustOrder kayıtları olan <sql:relationship>.
Örneğin, bir veritabanına aşağıdaki tablolar içerdiğini varsayalım:
Cust (CustomerID, CompanyName, şehir)
CustOrder (CustomerID, SiparişNo)
CustOrder tablosundaki MüşteriNo olduğu için MüşteriNo başvuran yabancı anahtar birincil anahtar Cust tablo.
Şimdi, xml görünümü aşağıdaki açıklama eklenmiş xsd şeması belirtildiği gibi düşünün.Bu şemayı kullanan <sql:relationship> arasındaki ilişkiyi belirlemek içinMüş ve CustOrder tablo.
<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 bir çalışma örneği oluşturmak için gereken adımlar aşağıda verilmiştir.
Zaman bir <Müşteri> xml veri dosyasına öğe düğümü girer kapsam içine, xml Bulk Load için bir kayıt oluştururCust tablo. xml Bulk Load sonra kopyalar gerekli sütun değerlerini (CustomerID, CompanyName ve şehir) dan <CustomerID>, **<ŞirketAdı>**ve <Şehir> alt öğeler olarak bu öğeleri girin kapsam.
When an <Order> element node enters into scope, XML Bulk Load generates a record for the CustOrder table.xml Bulk Load değeri kopyalar SiparişNo öznitelik için bu kaydı.Gerekli CustomerID değeri sütun dan elde edilen <CustomerID> alt öğesi <Müşteri> öğesi.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.Alt öğe için yabancı bir değer açıkça belirtmesi durumunda olan genel kural anahtar öznitelik, xml Bulk Load bu değeri kullanır ve değer üst öğesinde belirtilen kullanarak elde <sql:relationship>.Bu <Sipariş> öğe düğümü gider kapsam dışında xml Bulk Load gönderir kayda SQL Server ve sonra işler tüm sonraki <Sipariş> Öğe düğümlerinin de aynı şekilde.
Son olarak, <Müşteri> öğe düğümü gider, kapsam.AT, saat, xml Bulk Load gönderir müşteri kaydına SQL Server.xml Bulk Load xml veri akışındaki sonraki tüm müşteriler için bu işlemi yürütür.
Eşleme şema hakkında iki gözlemler şunlardır:
Ne zaman "içerik" şema karşılar Kural (örneğin, müşteri ve sipariş ile ilgili tüm veriler tanımlanmış içinde kapsam ilgili olarak <Müşteri> ve <Sipariş> Öğe düğümlerinin), toplu yükleme başarılı.
Açıklayan, <Müşteri> uygun siparişi belirtilen öğelerin alt öğesiBu durum, <CustomerID> önce belirtilen alt öğe <Sipariş> alt öğesi.Giriş xml veri dosyasında, yani <CustomerID> öğe değeri yabancı anahtar olarak ne zaman değer <Sipariş> öğesi girer içine kapsam.Anahtar öznitelikleri ilk belirtilir; Bu "anahtar sipariş verme kuralı."
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 </Order> kayıt CustOrder tablo için tam olarak kabul edilir ve CustomerID CustOrder tablosundaki boş bir değer ile eklenen bitiş etiketi okuyun sonra sütun, hangi değil istenen sonucu
Çalışma örnek oluşturmak için
Bu örnekte, sağlanan şema SampleSchema.xml kaydedin.
Bu 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)) GO
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>
xml Bulk Load yürütmek için kaydedin ve aşağıdaki yürütme Microsoft (BulkLoad.vbs) Visual Basic Scripting Edition (VBScript) örnek:
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 için özel durumlar
O bir IDREF veya IDREFS türü düğümse kapsam içine girdiğinde, xml Bulk Load bir düğüm için bir kaydı oluşturmaz.Kayıt eksiksiz bir açıklaması bazı yerde şema oluşur 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 <Müşteri> ve <Sipariş> öğeleri.The <Customer> element includes an OrderList attribute 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>
BULK Load IDREFS türü düğümlerinin yoksayar çünkü hiçbir kayıt üretimi yoktur, OrderList öznitelik düğümü kapsam içine girer.Bu nedenle, siparişlerine eklenen sipariş kayıtları istediğiniz tablo, bu siparişleri yerde şemasındaki açıklamak gerekir.Bu şema belirtmek <Sipariş> öğe sağlar xml Bulk Load siparişleri için sipariş kayıtları ekler tablo.The <Order> element describes all the attributes that are required to fill the record for the CustOrder table.
Emin olmanız gerekir CustomerID ve SiparişNo değerler <Müşteri> öğesi eşleşen değerler <Sipariş> öğesi.Bilgi tutarlılığına bakımından sorumlu bütünlük.
Bir çalışma örneği sınamak için
Bu 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') GO
Bu örnekte SampleSchema.xml olarak sağlanan eşleme şema kaydedin.
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>
xml Bulk Load yürütmek için kaydedin ve bu VBScript örneği (SampleVB.vbs) yürütü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