Typisiertes im Vergleich zu nicht typisiertem XML
Sie können Variablen, Parameter und Spalten des xml-Datentyps erstellen. Optional können Sie eine Auflistung von XML-Schemas mit einer Variablen, einem Parameter oder einer Spalte vom Typ xml verknüpfen. In diesem Fall wird die Instanz des xml-Datentyps als typisiert bezeichnet. Anderenfalls wird die XML-Instanz als nicht typisiert bezeichnet.
Ein XML-Schema stellt Folgendes bereit:
- Überprüfungseinschränkungen
Bei jeder Zuweisung oder Änderung einer typisierten xml-Instanz überprüft SQL Server die Instanz. - Datentypinformationen über die Instanzdaten
Schemas stellen Informationen zu den Typen von Attributen und Elementen in der xml-Datentypinstanz bereit. Die Typinformationen stellen den Werten genauere operationale Semantik zur Verfügung. Dezimale arithmetische Operationen können z. B. für einen Dezimalwert, nicht jedoch für einen Zeichenfolgenwert ausgeführt werden. Aus diesem Grund ist die Speicherung typisierten XMLs erheblich kompakter als bei nicht typisiertem XML.
Bevor Sie typisierte xml-Variablen, -Parameter oder -Spalten erstellen können, müssen Sie die XML-Schemaauflistung zuerst mit Erstellen einer XML-Schemaauflistung erstellen. Anschließend können Sie die XML-Schemaauflistung mit Variablen, Parametern oder Spalten des xml-Datentyps verknüpfen. Die folgenden Beispiele zeigen die entsprechende Vorgehensweise.
Beispiele
Im folgenden Beispiel wird eine zweiteilige Benennungskonvention zum Angeben des Namens der XML-Schemaauflistung verwendet. Der erste Teil ist der AdventureWorks-Schemaname, der zweite Teil der Name der XML-Schemaauflistung.
A. Erstellen einer Variablen vom Typ xml und Verknüpfen einer Schemaauflistung mit dieser
Das folgende Beispiel erstellt eine Variable vom Typ xml und verknüpft eine Schemaauflistung mit dieser. Die im Beispiel angegebene Schemaauflistung wurde bereits in die AdventureWorks-Datenbank importiert.
DECLARE @x xml (Production.ProductDescriptionSchemaCollection)
B. Erstellen einer Tabelle mit einer Spalte vom Typ xml und Angeben eines Schemas für die Spalte
Das folgende Beispiel erstellt eine Tabelle mit einer Spalte vom Typ xml und gibt ein Schema für die Spalte an:
CREATE TABLE T1(
Col1 int,
Col2 xml (Production.ProductDescriptionSchemaCollection))
C. Übergeben eines Parameters vom Typ xml an eine gespeicherte Prozedur
Das folgende Beispiel übergibt einen Parameter vom Typ xml an eine gespeicherte Prozedur und gibt ein Schema für die Variable an:
CREATE PROCEDURE SampleProc
@ProdDescription xml (Production.ProductDescriptionSchemaCollection)
AS
Beachten Sie hinsichtlich der XML-Schemaauflistung Folgendes:
- Eine XML-Schemaauflistung ist nur in der Datenbank verfügbar, in der sie mit Erstellen einer XML-Schemaauflistung registriert wurde.
- Wenn Sie die Umwandlung aus einer Zeichenfolge in einen typisierten xml-Datentyp vornehmen, führt die Analyse außerdem die Überprüfung und Typisierung basierend auf den XML-Schemanamespaces in der angegebenen Auflistung aus.
- Sie können einen typisierten xml-Datentyp in einen nicht typisierten xml-Datentyp umwandeln und umgekehrt.
Weitere Informationen zu anderen Methoden zum Generieren von XML in SQL Server finden Sie unter Generieren von XML-Instanzen. Nachdem das XML generiert wurde, kann es einer Variablen vom Datentyp xml zugewiesen oder in Spalten vom Typ xml für die weitere Verarbeitung gespeichert werden.
In der Datentyphierarchie nimmt der xml-Datentyp einen Platz unter sql_variant und benutzerdefinierten Typen ein, steht jedoch über allen integrierten Typen.
D. Angeben von Aspekten zum Einschränken einer typisierten xml-Spalte
Für typisierte xml-Spalten können Sie die Spalte so einschränken, dass nur einzelne Elemente der obersten Ebene für jede darin gespeicherte Instanz zulässig sind. Sie geben zu diesem Zweck beim Erstellen der Tabelle den optionalen DOCUMENT
-Aspekt an, wie das folgende Beispiel zeigt:
CREATE TABLE T(Col1 xml
(DOCUMENT Production.ProductDescriptionSchemaCollection))
GO
DROP TABLE T
GO
Standardmäßig werden Instanzen, die in der typisierten xml-Spalte gespeichert werden, als XML-Inhalt und nicht als XML-Dokumente gespeichert. Folgendes wird auf diese Weise ermöglicht:
- Null oder zahlreiche Elemente der obersten Ebene
- Textknoten in Elementen der obersten Ebene
Sie können dieses Verhalten auch explizit festlegen, indem Sie, wie im folgenden Beispiel dargestellt, das CONTENT
-Facet hinzufügen:
CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection))
GO -- Default
Beachten Sie, dass Sie die optionalen DOCUMENT/CONTENT-Aspekte immer angeben können, wenn Sie den xml-Typ definieren (typisiertes xml). Wenn Sie eine typisierte xml-Variable erstellen, können Sie z. B. den DOCUMENT/CONTENT-Apekt wie im folgenden Beispiel gezeigt hinzufügen:
declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection)
Siehe auch
Konzepte
Generieren von XML-Instanzen
XML DML (Data Modification Language)
XML-Datentyp
XML-Beispielanwendungen