Freigeben über


Richtlinien und Einschränkungen des XML-Massenladevorgangs (SQLXML 4.0)

Wenn Sie XML-Massenladevorgang verwenden, sollten Sie mit den folgenden Richtlinien und Einschränkungen vertraut sein:

  • Inlineschemas werden nicht unterstützt.

    Wenn Sie über ein Inlineschema im XML-Quelldokument verfügen, ignoriert XML-Massenladevorgang dieses Schema. Sie geben das Zuordnungsschema für XML-Massenladevorgänge außerhalb der XML-Daten an. Sie können das Zuordnungsschema für einen Knoten nicht mithilfe des Attributs "xmlns="x:schema" angeben.

  • Ein XML-Dokument wird auf wohlgeformt überprüft, aber es wird nicht überprüft.

    Beim XML-Massenladevorgang wird das XML-Dokument überprüft, um festzustellen, ob es wohlgeformt ist, um sicherzustellen, dass der XML-Code den Syntaxanforderungen der XML 1.0-Empfehlung des World Wide Web Consortium entspricht. Wenn das Dokument nicht wohlgeformt ist, bricht xml Bulk Load die Verarbeitung ab und gibt einen Fehler zurück. Die einzige Ausnahme ist, wenn das Dokument ein Fragment ist (z. B. das Dokument hat kein einzelnes Stammelement), in diesem Fall lädt XML Bulk Load das Dokument.

    Xml-Massenladevorgang überprüft das Dokument nicht im Hinblick auf XML-Data- oder DTD-Schemas, das innerhalb der XML-Datendatei definiert oder referenziert wird. Darüber hinaus überprüft XML-Massenladevorgang die XML-Datendatei nicht anhand des bereitgestellten Zuordnungsschemas.

  • Alle XML-Prologinformationen werden ignoriert.

    Beim XML-Massenladevorgang werden alle Informationen vor und nach dem <Stammelement> im XML-Dokument ignoriert. Beispielsweise ignoriert XML-Massenladevorgang alle XML-Deklarationen, interne DTD-Definitionen, externe DTD-Verweise, Kommentare usw.

  • Wenn Sie über ein Zuordnungsschema verfügen, das eine Primärschlüssel-/Fremdschlüsselbeziehung zwischen zwei Tabellen (z. B. zwischen Kunde und CustOrder) definiert, muss die Tabelle mit dem Primärschlüssel zuerst im Schema beschrieben werden. Die Tabelle mit der Fremdschlüsselspalte muss später im Schema angezeigt werden. Der Grund dafür ist, dass die Reihenfolge, in der die Tabellen im Schema identifiziert werden, die Reihenfolge ist, in der sie in die Datenbank geladen werden. Das folgende XDR-Schema erzeugt beispielsweise einen Fehler, wenn es in XML-Massenladevorgang verwendet wird, da das <Order-Element> vor dem <Customer-Element> beschrieben wird. Die Spalte "CustomerID" in CustOrder ist eine Fremdschlüsselspalte, die auf die Primärschlüsselspalte "CustomerID" in der Cust-Tabelle verweist.

    <?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>  
    
  • Wenn das Schema keine Überlaufspalten mithilfe der sql:overflow-field Anmerkung angibt, ignoriert XML Bulk Load alle Daten, die im XML-Dokument vorhanden sind, aber nicht im Zuordnungsschema beschrieben werden.

    Xml-Massenladevorgang wendet das Zuordnungsschema an, das Sie angegeben haben, wenn bekannte Tags im XML-Datenstrom gefunden werden. Es ignoriert Daten, die im XML-Dokument vorhanden sind, aber nicht im Schema beschrieben werden. Angenommen, Sie haben ein Zuordnungsschema, das ein <Customer-Element> beschreibt. Die XML-Datendatei verfügt über ein <AllCustomers-Stammtag> (das im Schema nicht beschrieben wird), das alle <Customer-Elemente> einschließt:

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

    In diesem Fall ignoriert XML Bulk Load das <AllCustomers-Element> und beginnt mit der Zuordnung am <Customer-Element> . Xml-Massenladevorgang ignoriert die Elemente, die nicht im Schema beschrieben werden, aber im XML-Dokument vorhanden sind.

    Ziehen Sie eine weitere XML-Quelldatendatei in Betracht, die Order-Elemente> enthält<. Diese Elemente werden im Zuordnungsschema nicht beschrieben:

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

    Xml-Massenladevorgang ignoriert diese <Order-Elemente> . Wenn Sie jedoch die sql:overflow-fieldAnmerkung im Schema verwenden, um eine Spalte als Überlaufspalte zu identifizieren, speichert XML Bulk Load alle nicht verarbeiteten Daten in dieser Spalte.

  • CDATA-Abschnitte und Entitätsverweise werden in ihre Zeichenfolgenentsprechungen übersetzt, bevor sie in der Datenbank gespeichert werden.

    In diesem Beispiel umschließt ein CDATA-Abschnitt den Wert für das <City-Element> . Xml Bulk Load extrahiert den Zeichenfolgenwert ("NY"), bevor es das <City-Element> in die Datenbank einfügt.

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

    Xml-Massenladevorgang behält keine Entitätsverweise bei.

  • Wenn das Zuordnungsschema den Standardwert für ein Attribut angibt und die XML-Quelldaten dieses Attribut nicht enthalten, verwendet XML Bulk Load den Standardwert.

    Das folgende XDR-Beispielschema weist dem Attribut "HireDate " einen Standardwert zu:

    <?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 diesen XML-Daten fehlt das Attribut "HireDate" im zweiten <Customers-Element> . Wenn xml-Massenladevorgang das zweite <Customers-Element> in die Datenbank einfügt, verwendet es den Standardwert, der im Schema angegeben ist.

    <ROOT>  
      <Customers CustomerID="1" HireDate="1999-01-01" Salary="10000" />  
      <Customers CustomerID="2" Salary="10000" />  
    </ROOT>  
    
  • Die sql:url-encode Anmerkung wird nicht unterstützt:

    Sie können keine URL in der XML-Dateneingabe angeben und erwarten, dass massenweises Laden Daten von diesem Speicherort aus liest.

    Die im Zuordnungsschema identifizierten Tabellen werden erstellt (die Datenbank muss vorhanden sein). Wenn eine oder mehrere Tabellen bereits in der Datenbank vorhanden sind, bestimmt die SGDropTables-Eigenschaft, ob diese bereits vorhandenen Tabellen gelöscht und neu erstellt werden sollen.

  • Wenn Sie die SchemaGen-Eigenschaft (z. B. SchemaGen = true) angeben, werden die im Zuordnungsschema identifizierten Tabellen erstellt. SchemaGen erstellt jedoch keine Einschränkungen (z. B. die EINSCHRÄNKUNG PRIMÄRSCHLÜSSEL/FREMDSCHLÜSSEL) für diese Tabellen mit einer Ausnahme: Wenn die XML-Knoten, die den Primärschlüssel in einer Beziehung darstellen, als XML-Typ der ID (d. h type="xsd:ID" . für XSD) definiert sind und die SGUseID-Eigenschaft für SchemaGen auf "True" festgelegt ist, Dann werden nicht nur Primärschlüssel aus den ID-typierten Knoten erstellt, sondern Primärschlüssel-/Fremdschlüsselbeziehungen werden aus Zuordnungsschemabeziehungen erstellt.

  • SchemaGen verwendet keine XSD-Schema-Facets und -Erweiterungen, um das relationale SQL Server-Schema zu generieren.

  • Wenn Sie die SchemaGen-Eigenschaft (z. B. SchemaGen = true) beim Massenladevorgang angeben, werden nur Tabellen (und keine Ansichten des freigegebenen Namens) aktualisiert.

  • SchemaGen stellt nur grundlegende Funktionen zum Generieren des relationalen Schemas aus kommentierten XSD bereit. Der Benutzer sollte die generierten Tabellen bei Bedarf manuell ändern.

  • Wenn zwischen Tabellen mehr als eine Beziehung besteht, versucht SchemaGen, eine einzelne Beziehung zu erstellen, die alle zwischen den beiden Tabellen beteiligten Schlüssel enthält. Diese Einschränkung kann die Ursache eines Transact-SQL Fehlers sein.

  • Beim Massenladen von XML-Daten in eine Datenbank muss mindestens ein Attribut oder untergeordnetes Element im Zuordnungsschema vorhanden sein, das einer Datenbankspalte zugeordnet ist.

  • Wenn Sie Datumswerte mithilfe von XML-Massenladevorgang einfügen, müssen die Werte im (-)CCYY-MM-DD(+-)TZ-Format angegeben werden. Dies ist das standardmäßige XSD-Format für das Datum.

  • Einige Eigenschaftskennzeichnungen sind nicht mit anderen Eigenschaftskennzeichnungen kompatibel. Beispielsweise wird Ignoreduplicatekeys=true die Massenlast nicht zusammen mit Keepidentity=false. Bei Keepidentity=falseder Massenlast wird erwartet, dass der Server die Schlüsselwerte generiert. Tabellen sollten eine IDENTITY Einschränkung für den Schlüssel aufweisen. Der Server generiert keine doppelten Schlüssel, was bedeutet, dass es nicht erforderlich Ignoreduplicatekeys ist, auf .true Ignoreduplicatekeys sollte nur festgelegt true werden, wenn Primärschlüsselwerte aus den eingehenden Daten in eine Tabelle hochgeladen werden, die Zeilen enthält und ein Konfliktpotenzial für Primärschlüsselwerte besteht.