Kuralları ve XML toplu yükleme (SQLXML 4.0) ile ilgili sınırlamalar
XML toplu yükleme kullandığınızda, aşağıdaki kuralları ve sınırlamaları hakkında bilgi sahibi olmanız gerekir:
Satır içi şemalar desteklenmez.
Kaynak XML belgesinde bir satır içi şema varsa, bu şema XML toplu yükleme göz ardı eder.XML verileri dış XML toplu yükleme için şema eşlemesi belirtin.Bir düğümdeki eşleştirme şemasını kullanarak belirtemezsiniz xmlns "x: şema" = özniteliği.
Bir XML belgesi iyi biçimlendirilmiş denetlenir, ancak değil doğrulanır.
XML belgesi iyi biçimlendirilmiş olup olmadığını belirlemek için XML toplu yükleme denetler — diğer bir deyişle, XML emin World Wide Web Consortium'ın, XML 1.0 öneri sözdizimi gereksinimlerine uygundur.Belgenin iyi biçimlendirilmiş değilse, XML toplu yükleme işlemini iptal eder ve bir hata döndürür.Belgenin bir parçası olduğunda, tek özel durum ise (örneğin, belge kök öğesi yok varsa), durumda XML Bulk yükü belge yükleyecektir.
XML toplu yükleme tanımlanan veya XML veri dosyasında başvurulan XML-Data veya DTD şema göre belge doğrulamaz.Buna ek olarak, XML veri dosyasını sağladığı eşleme şemayla XML toplu yükleme doğrulamaz.
Bir XML giriş bilgileri dikkate alınmaz.
XML toplu yükleme önce ve sonra tüm bilgileri yoksayar <kök> XML belgesindeki öğedir. Örneğin, tüm XML bildirimleri, iç DTD tanımları, dış DTD başvuruları, açıklama vb. XML toplu yükleme yoksayar.
(Müşteri ve CustOrder arasında gibi) iki tablo arasında birincil anahtara yabancı anahtar ilişkisi tanımlayan bir eşleme şeması varsa, birincil anahtar tablosuyla ilk şemada tanımlandığı olması gerekir.Yabancı anahtar sütun içeren tabloyu şemada yer almalıdır.Bunun nedeni, tablolar şemada tanımlanan sipariş veritabanına yüklemeye kullanılan sipariş olmasıdır.For example, the following XDR schema will produce an error when it is used in XML Bulk Load because the <Order> element is described before the <Customer> element.CustOrder MüşteriNo sütunundaki MüşteriNo birincil anahtar sütun müşteri tablosundaki başvuran yabancı anahtar sütununa ' dir.
<?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <ElementType name="Order" sql:relation="CustOrder" > <AttributeType name="OrderID" /> <AttributeType name="CustomerID" /> <attribute type="OrderID" /> <attribute type="CustomerID" /> </ElementType> <ElementType name="CustomerID" dt:type="int" /> <ElementType name="CompanyName" dt:type="string" /> <ElementType name="City" dt:type="string" /> <ElementType name="root" sql:is-constant="1"> <element type="Customers" /> </ElementType> <ElementType name="Customers" sql:relation="Cust" sql:overflow-field="OverflowColumn" > <element type="CustomerID" sql:field="CustomerID" /> <element type="CompanyName" sql:field="CompanyName" /> <element type="City" sql:field="City" /> <element type="Order" > <sql:relationship key-relation="Cust" key="CustomerID" foreign-key="CustomerID" foreign-relation="CustOrder" /> </element> </ElementType> </Schema>
Şema taşma sütunları kullanarak belirtmez, sql:overflow-field Ek açıklamayı XML toplu yükleme XML belgesindeki var, ancak eşleme şemada tanımlanan tüm verileri yok sayar.
Belirttiğiniz eşleme şeması XML toplu yükleme geçerli XML veri akışı bilinen etiketleri bulduğu her.XML belgesinde var, ancak şemada tanımlanan veri göz ardı eder.Örneğin açıklayan bir eşleme şeması olan varsayalım bir <Müşteri> Öğe. XML veri dosyasının bir <AllCustomers> Tüm kapsayan (şemada açıklanmayan) etiketi kök <Müşteri> öğeleri:
<AllCustomers> <Customer>...</Customer> <Customer>...</Customer> ... </AllCustomers>
Bu durumda, XML toplu yükleme yoksayar <AllCustomers> öğe ve eşleme sırasında <Müşteri> Öğe. XML toplu yükleme şemada tanımlanan ancak bir XML belgesinde bulunan öğeleri yoksayar.
Içeren başka bir XML kaynak veri dosyası göz önünde bulundurun. <Sipariş> öğeleri. Bu öğeleri eşleme şemada açıklanmaktadır:
<AllCustomers> <Customer>...</Customer> <Order> ... </Order> <Order> ... </Order> ... <Customer>...</Customer> <Order> ... </Order> <Order> ... </Order> ... ... </AllCustomers>
Bu XML toplu yükleme yok sayıyor <Sipariş> öğeleri. But if you use the sql:overflow-fieldannotation in the schema to identify a column as an overflow column, XML Bulk Load stores all unconsumed data in this column.
Veritabanında depolanan önce CDATA bölümü ve varlık başvuruları dize eşdeğerlerine çevrilir.
Örneğin, değeri bir CDATA bölümü sarar <Şehir> Öğe. XML Bulk Load extracts the string value ("NY") before it inserts the <City> element into the database.
<City><![CDATA[NY]]> </City>
XML toplu yükleme varlık başvuruları korumaz.
Bir öznitelik için varsayılan değer eşleme şemada belirtir ve XML kaynak verileri bu özniteliği içeren, XML toplu yükleme varsayılan değer olarak kullanır.
Aşağıdaki örnek XDR şeması için varsayılan bir değer atar HireDate öznitelik:
<?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <ElementType name="root" sql:is-constant="1"> <element type="Customers" /> </ElementType> <ElementType name="Customers" sql:relation="Cust3" > <AttributeType name="CustomerID" dt:type="int" /> <AttributeType name="HireDate" default="2000-01-01" /> <AttributeType name="Salary" /> <attribute type="CustomerID" sql:field="CustomerID" /> <attribute type="HireDate" sql:field="HireDate" /> <attribute type="Salary" sql:field="Salary" /> </ElementType> </Schema>
Bu XML veri HireDate ikinci özniteliği eksik**<Müşteriler>** Öğe. When XML Bulk Load inserts the second <Customers> element into the database, it uses the default value that is specified in the schema.
<ROOT> <Customers CustomerID="1" HireDate="1999-01-01" Salary="10000" /> <Customers CustomerID="2" Salary="10000" /> </ROOT>
The sql:url-encode annotation is not supported:
XML veri girişi bir URL belirtin ve verileri o konumdan okunamıyor, toplu yükleme beklediğiniz edemiyor.
Eşleme şemada tanımlanan tablo oluşturulur (veritabanında bulunması gerekir).Veritabanında tablolardan birini veya birkaçını zaten varsa, SGDropTables özellik, bu hazır tabloları bıraktı ve yeniden olup olmadığını belirler.
Belirttiğiniz SchemaGen (örneğin, özellik SchemaGen = true), eşleme şemada tanımlanan tablo oluşturulur. Ancak SchemaGen Bu tabloları (örneğin, birincil anahtar/yabancı anahtar kısıtlamaları) kısıtlamaları herhangi bir özel durum dışında oluşturun: Bir ilişkinin birincil anahtar oluşturan XML düğümleri, bir ııswebdirectory (diğer bir deyişle, KIMLIĞI XML tipine sahip olarak tanımlanmışsatype="xsd:ID" XSD için) AND SGUseID özellik için true olarak küme SchemaGen, sonra da yalnızca gelen birincil anahtarlar oluşturulur düğüm KIMLIĞI yazdınız, ancak birincil anahtara yabancı anahtar ilişkileri şema ilişkileri eşleme tarafından oluşturulur.
SchemaGen XSD şeması esaslarını ve uzantıları ilişkisel oluşturmaya kullanmaz SQL Server Schema.
Belirttiğiniz SchemaGen (örneğin, özellik SchemaGen = true) BULK belirtilen yük, yalnızca tabloları (ve paylaşılan ad görünümlerini) göre güncelleştirilir.
SchemaGen Yalnızca açıklama eklediğiniz XSD ilişkisel şeması oluşturmak için temel işlevselliği sağlar.Kullanıcı oluşturulan tablo, gerekirse el ile değiştirmeniz gerekir.
Where more than relationship exists between tables,SchemaGen tries to create a single relationship that includes all the keys involved between the two tables.Bu sınırlama, nedeni olabilir bir Transact-SQL Hata.
Toplu olduğunuzda XML verileri bir veritabanına yükleniyor, en az bir öznitelik veya alt öğe olmalıdır eşleme şemada bir veritabanına eşlenen sütun.
Tarih değerleri XML toplu yükleme kullanarak eklediğiniz, değerleri (-)CCYY-MM-DD((+-)TZ) biçimi. mutlaka belirtilmeliBu standart XSD tarih biçimidir.
Bazı özellik bayraklarını, başka bir özellik bayraklarıyla uyumlu değil.Örneğin, toplu yükleme desteklemiyor Ignoreduplicatekeys=true ile birlikte Keepidentity=false. Ne zaman Keepidentity=false, toplu yükleme anahtar değerleri oluşturmak için sunucu umuyor. Tablolar olmalı bir IDENTITY anahtar sınırlaması. The server will not generate duplicate keys, which means that there is no need for Ignoreduplicatekeys to be set to true.Ignoreduplicatekeys should be set to true only when uploading primary key values from the incoming data into a table that has rows and there is a potential for conflict of primary key values.