Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Wanneer u XML Bulksgewijs laden gebruikt, moet u bekend zijn met de volgende richtlijnen en beperkingen:
Inlineschema's worden niet ondersteund.
Als u een inlineschema in het bron-XML-document hebt, negeert XML Bulk load dat schema. U geeft het toewijzingsschema op voor xml-bulksgewijs laden buiten de XML-gegevens. U kunt het toewijzingsschema op een knooppunt niet opgeven met behulp van het kenmerk xmlns="x:schema" .
Er wordt gecontroleerd of een XML-document goed is opgemaakt, maar het wordt niet gevalideerd.
Xml Bulk Load controleert het XML-document om te bepalen of het goed is opgemaakt, om ervoor te zorgen dat de XML voldoet aan de syntaxisvereisten van de XML 1.0-aanbeveling van het World Wide Web Consortium. Als het document niet goed is opgemaakt, annuleert XML Bulk Load de verwerking en retourneert een fout. De enige uitzondering hierop is wanneer het document een fragment is (bijvoorbeeld dat het document geen enkel hoofdelement heeft), in welk geval xml bulksgewijs laden het document laadt.
Xml-bulksgewijs laden valideert het document niet met betrekking tot een XML-Data- of DTD-schema dat is gedefinieerd of waarnaar wordt verwezen in het XML-gegevensbestand. Daarnaast valideert XML-bulksgewijs laden het XML-gegevensbestand niet op basis van het opgegeven toewijzingsschema.
Alle XML-prolog-gegevens worden genegeerd.
Xml Bulksgewijs laden negeert alle informatie voor en na het <hoofdelement> in het XML-document. Xml Bulk Load negeert bijvoorbeeld eventuele XML-declaraties, interne DTD-definities, externe DTD-verwijzingen, opmerkingen enzovoort.
Als u een toewijzingsschema hebt waarmee een relatie tussen een primaire sleutel/refererende sleutel tussen twee tabellen (zoals tussen Klant en CustOrder) wordt gedefinieerd, moet de tabel met de primaire sleutel eerst in het schema worden beschreven. De tabel met de kolom refererende sleutel moet later in het schema worden weergegeven. De reden hiervoor is dat de volgorde waarin de tabellen worden geïdentificeerd in het schema de volgorde is die wordt gebruikt om ze in de database te laden. Met het volgende XDR-schema wordt bijvoorbeeld een fout gegenereerd wanneer het wordt gebruikt in xml-bulksgewijs laden, omdat het <element Order> wordt beschreven vóór het <element Klant> . De kolom CustomerID in CustOrder is een refererende-sleutelkolom die verwijst naar de primaire sleutelkolom CustomerID in de Cust-tabel.
<?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>Als in het schema geen overloopkolommen worden opgegeven met behulp van de aantekening van sql:overflow-veld , worden alle gegevens die aanwezig zijn in het XML-document genegeerd, maar worden deze niet beschreven in het toewijzingsschema.
Xml Bulk Load past het toewijzingsschema toe dat u hebt opgegeven wanneer er bekende tags in de XML-gegevensstroom worden aangeroepen. Hiermee worden gegevens genegeerd die aanwezig zijn in het XML-document, maar worden niet beschreven in het schema. Stel dat u een toewijzingsschema hebt dat een <klantelement> beschrijft. Het XML-gegevensbestand heeft een <allCustomers-hoofdtag> (die niet wordt beschreven in het schema) die alle <klantelementen> insluit:
<AllCustomers> <Customer>...</Customer> <Customer>...</Customer> ... </AllCustomers>In dit geval negeert XML Bulk Load het <element AllCustomers> en begint de toewijzing aan het <element Klant> . Xml Bulksgewijs laden negeert de elementen die niet in het schema worden beschreven, maar die aanwezig zijn in het XML-document.
Overweeg een ander XML-brongegevensbestand dat orderelementen< bevat>. Deze elementen worden niet beschreven in het toewijzingsschema:
<AllCustomers> <Customer>...</Customer> <Order> ... </Order> <Order> ... </Order> ... <Customer>...</Customer> <Order> ... </Order> <Order> ... </Order> ... ... </AllCustomers>Xml-bulksgewijs laden negeert deze <orderelementen> . Maar als u de aantekening van sql:overflow-velden in het schema gebruikt om een kolom te identificeren als een overloopkolom, worden in XML Bulk Load alle niet-verwerkte gegevens in deze kolom opgeslagen.
CDATA-secties en entiteitsverwijzingen worden vertaald naar hun tekenreeksequivalenten voordat ze in de database worden opgeslagen.
In dit voorbeeld verpakt een CDATA-sectie de waarde voor het <element Plaats> . Met XML Bulk Load wordt de tekenreekswaarde ("NY") geëxtraheerd voordat het <element Plaats> in de database wordt ingevoegd.
<City><![CDATA[NY]]> </City>Xml-bulksgewijs laden behoudt geen entiteitsverwijzingen.
Als in het toewijzingsschema de standaardwaarde voor een kenmerk wordt opgegeven en de XML-brongegevens dat kenmerk niet bevatten, gebruikt XML Bulk Load de standaardwaarde.
In het volgende XDR-voorbeeldschema wordt een standaardwaarde toegewezen aan het kenmerk HireDate :
<?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>In deze XML-gegevens ontbreekt het kenmerk HireDate in het tweede <element Klanten> . Wanneer xml bulksgewijs laden het tweede <element Klanten> in de database invoegt, wordt de standaardwaarde gebruikt die is opgegeven in het schema.
<ROOT> <Customers CustomerID="1" HireDate="1999-01-01" Salary="10000" /> <Customers CustomerID="2" Salary="10000" /> </ROOT>De aantekening van sql:url-codering wordt niet ondersteund:
U kunt geen URL opgeven in de XML-gegevensinvoer en verwachten dat bulksgewijs laden gegevens van die locatie kan lezen.
De tabellen die in het toewijzingsschema worden geïdentificeerd, worden gemaakt (de database moet bestaan). Als er al een of meer tabellen in de database bestaan, bepaalt de eigenschap SGDropTables of deze bestaande tabellen moeten worden verwijderd en opnieuw worden gemaakt.
Als u de eigenschap SchemaGen opgeeft (bijvoorbeeld SchemaGen = true), worden de tabellen die in het toewijzingsschema worden geïdentificeerd, gemaakt. Maar SchemaGen maakt geen beperkingen (zoals de beperkingen PRIMAIRE SLEUTEL/REFERERENDE SLEUTEL) voor deze tabellen met één uitzondering: Als de XML-knooppunten die de primaire sleutel in een relatie vormen, zijn gedefinieerd als een XML-type ID (dat wil gezegd : type="xsd:ID" voor XSD) EN de eigenschap SGUseID is ingesteld op True voor SchemaGen, dan zijn niet alleen primaire sleutels die zijn gemaakt op basis van de id-knooppunten, maar primaire sleutel-/refererende-sleutelrelaties worden gemaakt op basis van toewijzingsschemarelaties.
SchemaGen maakt geen gebruik van XSD-schema-facetten en -extensies om het relationele SQL Server-schema te genereren.
Als u de eigenschap SchemaGen (bijvoorbeeld SchemaGen = true) opgeeft bij bulksgewijs laden, worden alleen tabellen (en geen weergaven van gedeelde naam) bijgewerkt.
SchemaGen biedt alleen basisfunctionaliteit voor het genereren van het relationele schema van geannoteerde XSD. De gebruiker moet de gegenereerde tabellen handmatig wijzigen, indien nodig.
Als er meer dan één relatie tussen tabellen bestaat, probeert SchemaGen één relatie te maken die alle sleutels bevat die tussen de twee tabellen zijn betrokken. Deze beperking kan de oorzaak zijn van een Transact-SQL fout.
Wanneer u XML-gegevens bulksgewijs laadt in een database, moet er ten minste één kenmerk of onderliggend element in het toewijzingsschema staan dat is toegewezen aan een databasekolom.
Als u datumwaarden invoegt met xml-bulkbelasting, moeten de waarden worden opgegeven in de indeling (-)CCYY-MM-DD((+-)TZ). Dit is de standaard XSD-indeling voor de datum.
Sommige eigenschapsvlagmen zijn niet compatibel met andere eigenschapsvlagmen. Bulksgewijs laden biedt bijvoorbeeld geen ondersteuning voor Ignoreduplicatekeys=true , samen met Keepidentity=false. Als Keepidentity=false, verwacht bulksgewijs laden dat de server de sleutelwaarden genereert. Tabellen moeten een IDENTITEITSbeperking hebben op de sleutel. De server genereert geen dubbele sleutels, wat betekent dat ignoreduplicatekeys niet hoeven te worden ingesteld op true. Ignoreduplicatekeys moeten alleen worden ingesteld op true wanneer u primaire-sleutelwaarden van de binnenkomende gegevens uploadt naar een tabel met rijen en er een mogelijk conflict is tussen primaire-sleutelwaarden.