Einschränkungen des XML-Datentyps

Für den xml-Datentyp gelten folgende Einschränkungen:

  • Kann nicht als Untertyp einer sql_variant -Instanz verwendet werden

  • Unterstützt kein Umwandeln oder Konvertieren in text oder ntext.

  • Unterstützt folgende Spalten- und Tabelleneinschränkungen nicht:

    • PRIMARY KEY/ FOREIGN KEY
    • UNIQUE
    • COLLATE
      XML stellt eine eigene Codierung bereit. Sortierungen gelten nur für Zeichenfolgentypen. Der xml-Datentyp stellt keinen Zeichenfolgentyp dar. Er besitzt jedoch die Zeichenfolgendarstellung und ermöglicht das Umwandeln in und aus Zeichenfolgen-Datentypen.
    • RULE
  • Kann weder verglichen noch sortiert werden. Dies bedeutet, dass ein xml-Datentyp nicht in einer GROUP BY-Anweisung verwendet werden kann.

  • Kann nicht in verteilten partitionierten Sichten verwendet werden.

  • Er kann in einer materialisierten Sicht erstellt werden. Die materialisierte Sicht kann nicht auf einer xml-Datentypmethode basieren. Er kann jedoch in eine XML-Schemaauflistung umgewandelt werden, die sich von der XML-Typspalte der Basistabelle unterscheidet.

  • Kann für skalare, integrierte Funktionen außer ISNULL, COALESCE und DATALENGTH nicht als Parameter verwendet werden.

  • Kann nicht als Schlüsselspalte für einen Index verwendet werden. Kann jedoch als Daten in einen gruppierten Index aufgenommen werden oder über das Schlüsselwort INCLUDE explizit zu einem nicht gruppierten Index hinzugefügt werden, wenn der nicht gruppierte Index erstellt wird.

  • Die XML-Deklaration PI in einer Instanz wird nicht erhalten, wenn die Instanz in der Datenbank gespeichert wird. Beispiel:

    CREATE TABLE T1 (Col1 int primary key, Col2 xml)
    GO
    INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>')
    GO
    SELECT Col2
    FROM T1
    

    Das Ergebnis ist <doc/>.
    Die XML-Deklaration PI (z. B. <?xml version='1.0'?>) wird nicht erhalten, wenn XML-Daten in einer xml-Datentypinstanz gespeichert werden. Das ist programmbedingt. Die XML-Deklaration (<?xml ... ?>) und die Attribute (Version/Codierung/Eigenständigkeit) gehen bei der Konvertierung in den Typ xml verloren. Die XML-Deklaration wird als Direktive für den XML-Parser behandelt. Die XML-Daten werden intern als ucs-2 gespeichert. Alle anderen PI der XML-Instanz bleiben erhalten.

  • Die Reihenfolge der Attribute in einer XML-Instanz wird nicht erhalten. Bei einer Abfrage der in der xml-Typspalte gespeicherten XML-Instanz kann die Reihenfolge der Attribute im resultierenden XML von der der ursprünglichen XML-Instanz abweichen.

  • Standardmäßig werden keine insignifikanten Leerzeichen erhalten. Beispiel:

    DECLARE @x xml
    SET @x = '<root>      <child/>     </root>'
    SELECT @x 
    

    Dies gibt Folgendes zurück:

    <root><child/></root>
    

    Sie können dieses Verhalten jedoch ändern. Verwenden Sie den CONVERT-Operator, und legen Sie den optionalen style-Parameter auf 1 fest, um die Leerzeichen für eine xml-Datentypinstanz beizubehalten. Beispiel:

    SELECT CONVERT(xml, N'<root>      <child/>     </root>', 1)
    

    Wenn der style-Parameter nicht verwendet wird oder sein Wert auf 0 festgelegt ist, werden insignifikante Leerzeichen für die Konvertierung der xml-Datentypinstanz nicht beibehalten. Weitere Informationen zum Verwenden des CONVERT-Operators und seines style-Parameters für die Konvertierung von Zeichenfolgendaten in xml-Datentypinstanzen finden Sie unter CAST und CONVERT (Transact-SQL).

  • Einfache Anführungszeichen und doppelte Anführungszeichen um Attributwerte werden nicht erhalten. Die Attributwerte werden in der Datenbank als Name/Wert-Paar gespeichert. Die Anführungszeichen werden nicht gespeichert. Wenn eine XQuery-Abfrage für eine XML-Instanz ausgeführt wird, wird das resultierende XML mit doppelten Anführungszeichen um die Attributwerte serialisiert.

    DECLARE @x xml
    -- Use double quotation marks.
    SET @x = '<root a="1" />'
    SELECT @x
    GO
    DECLARE @x xml
    -- Use single quotation marks.
    SET @x = '<root a=''1'' />'
    SELECT @x
    GO
    

    Für beide Abfragen wird Folgendes zurückgeben: = <root a="1" />.

  • Namespacepräfixe werden nicht erhalten. Wenn Sie eine XQuery-Abfrage für eine xml-Typspalte angeben, werden vom serialisierten XML-Ergebnis möglicherweise andere Namespacepräfixe zurückgeben.

    DECLARE @x xml
    SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
                <ns2:SomeElement/>
              </ns1:root>'
    SELECT @x
    SELECT @x.query('/*')
    GO
    

    Das Namespacepräfix des Ergebnisses kann unterschiedlich sein. Beispiel:

    <p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>
    
  • Wenn Sie XML als Zeichenfolgenliteral kopieren und in SQL Server Management Studio im Abfrage-Editor einfügen, stellen Sie ggf. Inkompatibilitäten bei [N]VARCHAR-Zeichenfolgencodierungen fest. Dies hängt von der Codierung Ihrer XML-Instanz ab. In vielen Fällen möchten Sie die XML-Deklaration möglicherweise entfernen. Beispiel:

    <?xml version="1.0" encoding="UTF-8"?>
      <xsd:schema …
    

    Dann sollten Sie ein N einfügen, um aus der XML-Instanz eine Unicodeinstanz zu machen. Beispiel:

    -- Assign XML instance to a variable.
    DECLARE @X XML
    SET @X = N'…'
    -- Insert XML instance into an xml type column.
    INSERT INTO T VALUES (N'…')
    -- Create an XML schema collection
    CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema … '
    
  • Von SQL Server werden xml-Datentypinstanzen an den Client zurückgegeben, die das Ergebnis unterschiedlicher Serverkonstrukte sind (z. B. FOR XML-Abfragen, für die die TYPE-Direktive verwendet wird, oder bei denen der xml-Datentyp verwendet wird, um XML aus SQL-Spalten, -Variablen und -Ausgabeparametern zurückzugeben). Im Clientanwendungscode wird vom ADO.NET-Anbieter angefordert, dass diese xml-Datentypinformationen als Binärcode vom Server gesendet werden. Wenn Sie FOR XML jedoch ohne die TYPE-Direktive verwenden, werden die XML-Daten als Zeichenfolgentyp zurückgegeben. In beiden Fällen ist der Client-Anbieter in der Lage, die jeweilige XML-Form zu verarbeiten.

Siehe auch

Konzepte

XML-Beispielanwendungen
Typisiertes im Vergleich zu nicht typisiertem XML
Generieren von XML-Instanzen
XML DML (Data Modification Language)
XML-Datentyp

Andere Ressourcen

xml-Datentypmethoden

Hilfe und Informationen

Informationsquellen für SQL Server 2005