Megosztás a következőn keresztül:


Az XML tömeges terhelésének irányelvei és korlátozásai (SQLXML 4.0)

A következőkre vonatkozik:SQL ServerAzure SQL Database

Az XML tömeges betöltésekor ismernie kell az alábbi irányelveket és korlátozásokat:

  • A beágyazott sémák nem támogatottak.

    Ha beágyazott sémát használ a forrás XML-dokumentumban, az XML tömeges betöltése figyelmen kívül hagyja ezt a sémát. Meg kell adnia az XML-adatokon kívüli tömeges XML-betöltés leképezési sémáját. A leképezési sémát nem adhatja meg csomóponton az xmlns="x:schema" attribútum használatával.

  • A rendszer ellenőrzi, hogy egy XML-dokumentum jól formázott-e, de nincs érvényesítve.

    Az XML-tömeges terhelés ellenőrzi az XML-dokumentumot annak megállapításához, hogy jól formázott-e, hogy az XML megfelel-e a World Wide Web Consortium XML 1.0-s javaslatának szintaxiskövetelményeinek. Ha a dokumentum nem megfelelően formázott, az XML tömeges betöltése megszakítja a feldolgozást, és hibát ad vissza. Ez alól az egyetlen kivétel, ha a dokumentum egy töredék (például a dokumentumnak nincs egyetlen gyökéreleme), ebben az esetben az XML tömeges betöltése betölti a dokumentumot.

    Az XML tömeges betöltése nem ellenőrzi a dokumentumot az XML-adatfájlban definiált vagy hivatkozott XML-Data vagy DTD-sémára vonatkozóan. Emellett az XML tömeges betöltése nem ellenőrzi az XML-adatfájlt a megadott leképezési sémán.

  • A rendszer figyelmen kívül hagyja az XML-prolog-információkat.

    Az XML tömeges betöltése figyelmen kívül hagyja az XML-dokumentum gyökéreleme <> előtti és utáni összes információt. Az XML tömeges betöltése például figyelmen kívül hagyja az XML-deklarációkat, a belső DTD-definíciókat, a külső DTD-hivatkozásokat, a megjegyzéseket stb.

  • Ha olyan leképezési sémával rendelkezik, amely két tábla (például az Ügyfél és a CustOrder közötti) elsődleges kulcs/idegen kulcs kapcsolatát határozza meg, akkor az elsődleges kulccsal rendelkező táblát először a sémában kell leírni. Az idegenkulcs-oszlopot tartalmazó táblázatnak később meg kell jelennie a sémában. Ennek az az oka, hogy a táblák a sémában való azonosításának sorrendje az adatbázisba való betöltéshez használt sorrend. Az alábbi XDR-séma például hibát fog eredményezni az XML tömeges betöltésekor, mert a <Rendelés> elem az <Ügyfél> elem előtt van leírva. A CustOrder CustomerID oszlopa egy idegenkulcs-oszlop, amely a Cust tábla CustomerID elsődleges kulcs oszlopára hivatkozik.

    <?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>  
    
  • Ha a séma nem ad meg túlcsordulási oszlopokat az sql:overflow mező megjegyzésével, az XML tömeges betöltése figyelmen kívül hagyja az XML-dokumentumban található, de a leképezési sémában nem szereplő adatokat.

    Az XML tömeges betöltése a megadott leképezési sémát alkalmazza, amikor ismert címkékkel találkozik az XML-adatfolyamban. Figyelmen kívül hagyja az XML-dokumentumban található, de a sémában nem szereplő adatokat. Tegyük fel például, hogy rendelkezik egy ügyfélelemet< leíró> leképezési sémával. Az XML-adatfájl rendelkezik egy <AllCustomers gyökércímkével> (amely nem szerepel a sémában), amely az ügyfél< összes elemét> tartalmazza:

    <AllCustomers>  
      <Customer>...</Customer>  
      <Customer>...</Customer>  
       ...  
    </AllCustomers>  
    

    Ebben az esetben az XML tömeges betöltése figyelmen kívül hagyja az <AllCustomers> elemet, és megkezdi a leképezést az <Ügyfél> elemnél. Az XML tömeges betöltése figyelmen kívül hagyja a sémában nem leírt, de az XML-dokumentumban található elemeket.

    Fontolja meg egy másik XML-forrásadatfájlt, amely rendelési< elemeket tartalmaz>. Ezek az elemek nem szerepelnek a leképezési sémában:

    <AllCustomers>  
      <Customer>...</Customer>  
        <Order> ... </Order>  
        <Order> ... </Order>  
         ...  
      <Customer>...</Customer>  
        <Order> ... </Order>  
        <Order> ... </Order>  
         ...  
      ...  
    </AllCustomers>  
    

    Az XML tömeges betöltése figyelmen kívül hagyja ezeket a <rendelési> elemeket. Ha azonban a sémában az sql:overflow mező széljegyzetét használja egy oszlop túlcsordulási oszlopként való azonosításához, az XML Tömeges terhelés ebben az oszlopban tárolja az összes nem feldolgozott adatot.

  • A CDATA-szakaszok és entitáshivatkozások a sztring megfelelőire lesznek lefordítva, mielőtt az adatbázisban tárolva lennének.

    Ebben a példában egy CDATA-szakasz körbefuttatja a <Város> elem értékét. Az XML Tömeges terhelés kinyeri a sztringértéket ("NY"), mielőtt beszúrja a <City> elemet az adatbázisba.

    <City><![CDATA[NY]]> </City>  
    

    Az XML tömeges betöltése nem őrzi meg az entitáshivatkozásokat.

  • Ha a leképezési séma egy attribútum alapértelmezett értékét adja meg, és az XML-forrásadatok nem tartalmazzák ezt az attribútumot, az XML tömeges betöltése az alapértelmezett értéket használja.

    Az alábbi XDR-mintaséma egy alapértelmezett értéket rendel a HireDate attribútumhoz:

    <?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>  
    

    Ebben az XML-adatban a HireDate attribútum hiányzik a második <Ügyfelek> elemből. Amikor az XML tömeges betöltése beszúrja a második <Ügyfelek> elemet az adatbázisba, a séma által megadott alapértelmezett értéket használja.

    <ROOT>  
      <Customers CustomerID="1" HireDate="1999-01-01" Salary="10000" />  
      <Customers CustomerID="2" Salary="10000" />  
    </ROOT>  
    
  • Az sql:url-encode megjegyzés nem támogatott:

    Nem adhat meg URL-címet az XML-adatbemenetben, és arra számít, hogy a tömeges betöltés az adott helyről olvassa be az adatokat.

    A leképezési sémában azonosított táblák létrejönnek (az adatbázisnak léteznie kell). Ha egy vagy több tábla már létezik az adatbázisban, az SGDropTables tulajdonság határozza meg, hogy ezeket az előző táblákat el kell-e dobni és újra létre kell-e hozni.

  • Ha megadja a SchemaGen tulajdonságot (például SchemaGen = true), a leképezési sémában azonosított táblák létrejönnek. A SchemaGen azonban egyetlen kivétellel sem hoz létre korlátozásokat (például az ELSŐDLEGES KULCS/IDEGENKULCS-megkötéseket): Ha a kapcsolat elsődleges kulcsát alkotó XML-csomópontok XML-típusú azonosítóval (azaz xSD-hez való típus="xsd:ID" azonosítóval) vannak definiálva, és az SGUseID tulajdonság Értéke True a SchemaGen esetében, ezután nem csak az azonosítóval beírt csomópontokból jönnek létre elsődleges kulcsok, hanem az elsődleges kulcs-/idegenkulcs-kapcsolatok a leképezési sémakapcsolatokból jönnek létre.

  • A SchemaGen nem használ XSD-sémaelemet és -bővítményeket a relációs SQL Server-séma létrehozásához.

  • Ha a SchemaGen tulajdonságot (például SchemaGen = true) adja meg tömeges betöltéskor, csak a megadott táblák (és nem a megosztott név nézetei) frissülnek.

  • A SchemaGen csak alapszintű funkciókat biztosít a relációs séma jegyzetekkel ellátott XSD-ből való létrehozásához. A felhasználónak szükség esetén manuálisan kell módosítania a létrehozott táblákat.

  • Ha több kapcsolat is létezik a táblák között, a SchemaGen egyetlen kapcsolatot próbál létrehozni, amely tartalmazza a két tábla közötti összes kulcsot. Ez a korlátozás Transact-SQL hiba oka lehet.

  • Ha xml-adatokat tölt be tömegesen egy adatbázisba, a leképezési sémában legalább egy attribútumnak vagy gyermekelemnek kell lennie, amely egy adatbázisoszlopra van leképezve.

  • Ha dátumértékeket szúr be XML tömeges betöltéssel, az értékeket (-)CCYY-MM-DD((+-)TZ) formátumban kell megadni. Ez a dátum szabványos XSD-formátuma.

  • Egyes tulajdonságjelölők nem kompatibilisek más tulajdonságjelölőkkel. A tömeges terhelés például nem támogatja az Ignoreduplicatekeys=true és a Keepidentity=false együttes használatát. Ha a Keepidentity=false értékeket tárolja, a tömeges terhelés arra számít, hogy a kiszolgáló létrehozza a kulcsértékeket. A tábláknak identitáskorlátozással kell rendelkezniük a kulcson. A kiszolgáló nem hoz létre duplikált kulcsokat, ami azt jelenti, hogy nem szükséges, hogy az Ignoreduplicatekeys értéke igaz legyen. Az ignoreduplicatekeys értéket csak akkor kell igaz értékre állítani, ha a bejövő adatokból származó elsődleges kulcsértékeket egy sorokat tartalmazó táblába tölti fel, és fennáll az elsődleges kulcsértékek ütközésének lehetősége.