Abrufen und Abfragen von XML-DatenRetrieve and Query XML Data

In diesem Thema werden die Abfrageoptionen beschrieben, die für die Abfrage von XML-Daten anzugeben sind.This topic describes the query options that you have to specify to query XML data. Es beschreibt auch die Teile der XML-Instanzen, die nicht beibehalten werden, wenn sie in Datenbanken gespeichert werden.It also describes the parts of XML instances that are not preserved when they are stored in databases.

Funktionen einer XML-Instanz, die nicht beibehalten werden Features of an XML Instance That Are Not Preserved

SQL ServerSQL Server behält den Inhalt der XML-Instanz bei. Allerdings werden die Aspekte der XML-Instanz nicht beibehalten, die im Hinblick auf das XML-Datenmodell als nicht signifikant betrachtet werden. preserves the content of the XML instance, but does not preserve aspects of the XML instance that are not considered to be significant in the XML data model. Das bedeutet, dass eine abgerufene XML-Instanz möglicherweise nicht mit der Instanz identisch ist, die auf dem Server gespeichert wurde, aber die gleichen Informationen enthält.This means that a retrieved XML instance might not be identical to the instance that was stored in the server, but will contain the same information.

XML-DeklarationXML Declaration

Die XML-Deklaration in einer Instanz wird nicht beibehalten, wenn die Instanz in der Datenbank gespeichert wird.The XML declaration in an instance is not preserved when the instance is stored in the database. Beispiel:For example:

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/>.The result is <doc/>.

Die XML-Deklaration, z. B. <?xml version='1.0'?>, wird nicht beibehalten, wenn die XML-Daten in einer xml -Datentypinstanz gespeichert werden.The XML declaration, such as <?xml version='1.0'?>, is not preserved when storing XML data in an xml data type instance. Dies ist beabsichtigt.This is by design. Die XML-Deklaration () und die Attribute (Version/Codierung/Eigenständigkeit) gehen bei der Konvertierung in den Typ xmlverloren.The XML declaration () and its attributes (version/encoding/stand-alone) are lost after data is converted to type xml. Die XML-Deklaration wird als Direktive für den XML-Parser behandelt.The XML declaration is treated as a directive to the XML parser. Die XML-Daten werden intern als ucs-2 gespeichert.The XML data is stored internally as ucs-2. Alle anderen PIs in der XML-Instanz werden beibehalten.All other PIs in the XML instance are preserved.

Reihenfolge von AttributenOrder of Attributes

Die Reihenfolge der Attribute in einer XML-Instanz wird nicht erhalten.The order of attributes in an XML instance is not preserved. Bei einer Abfrage der in der xml -Typspalte gespeicherten XML-Instanz kann die Reihenfolge der Attribute in der resultierenden XML von der der ursprünglichen XML-Instanz abweichen.When you query the XML instance stored in the xml type column, the order of attributes in the resulting XML may be different from the original XML instance.

Anführungszeichen um AttributwerteQuotation Marks Around Attribute Values

Einfache Anführungszeichen und doppelte Anführungszeichen um Attributwerte werden nicht erhalten.Single quotation marks and double quotations marks around attribute values are not preserved. Die Attributwerte werden in der Datenbank als Name/Wert-Paar gespeichert.The attribute values are stored in the database as a name and value pair. Die Anführungszeichen werden nicht gespeichert.The quotation marks are not stored. Wenn eine XQuery-Abfrage für eine XML-Instanz ausgeführt wird, wird die resultierende XML mit doppelten Anführungszeichen um die Attributwerte serialisiert.When an XQuery is executed against an XML instance, the resulting XML is serialized with double quotation marks around the attribute values.

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" />.Both queries return = <root a="1" />.

NamespacepräfixeNamespace Prefixes

Namespacepräfixe werden nicht erhalten.Namespace prefixes are not preserved. Wenn Sie eine XQuery-Abfrage für eine xml -Typspalte angeben, werden vom serialisierten XML-Ergebnis möglicherweise andere Namespacepräfixe zurückgeben.When you specify XQuery against an xml type column, the serialized XML result may return different namespace prefixes.

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.The namespace prefix in the result may be different. Beispiel:For example:

<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>  

Festlegen der erforderlichen Abfrageoptionen Setting Required Query Options

Beim Abfragen von Spalten oder Variablen des xml -Datentyps mithilfe von xml -Datentypmethoden müssen die folgenden Optionen wie dargestellt festgelegt werden.When querying xml type columns or variables using xml data type methods, the following options must be set as shown.

SET-OptionenSET Options Erforderliche WerteRequired Values
ANSI_NULLSANSI_NULLS ONON
ANSI_PADDINGANSI_PADDING ONON
ANSI_WARNINGSANSI_WARNINGS ONON
ARITHABORTARITHABORT ONON
CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL ONON
NUMERIC_ROUNDABORTNUMERIC_ROUNDABORT OFFOFF
QUOTED_IDENTIFIERQUOTED_IDENTIFIER ONON

Wenn die Optionen nicht wie dargestellt festgelegt sind, schlagen Abfragen und Änderungen für xml -Datentypmethoden fehl.If the options are not set as shown, queries and modifications on xml data type methods will fail.

Siehe auchSee Also

Erstellen von Instanzen der XML-DatenCreate Instances of XML Data