Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Importiert die Schemakomponenten in eine Datenbank.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression
Argumente
relational_schema
Identifiziert den Namen des relationalen Schemas. Wird kein Wert angegeben, wird vom relationalen Standardschema ausgegangen.
sql_identifier
Der SQL-Bezeichner für die XML-Schemaauflistung.
Ausdruck
Eine Zeichenfolgenkonstante oder skalare Variable. Ist vom Typ Varchar, Varbinary, Nvarchar oder xml.
Bemerkungen
Mithilfe von ALTER XML SCHEMA COLLECTION können Sie der Collection auch neue Namespaces bzw. vorhandenen Namespaces in der Auflistung auch neue Komponenten hinzufügen.
Um Sammlungen zu entfernen, verwenden Sie DROP XML SCHEMA COLLECTION.
Berechtigungen
Zum Erstellen von XML SCHEMA COLLECTION ist zumindest eine der folgenden Berechtigungsgruppen erforderlich:
-
CONTROLBerechtigung auf dem Server -
ALTER ANY DATABASEBerechtigung auf dem Server -
ALTERBerechtigung für die Datenbank -
CONTROLBerechtigung in der Datenbank -
ALTER ANY SCHEMABerechtigung undCREATE XML SCHEMA COLLECTIONBerechtigung in der Datenbank -
ALTERoderCONTROLBerechtigung für das relationale Schema undCREATE XML SCHEMA COLLECTIONdie Berechtigung in der Datenbank
Beispiele
A. Erstellen einer XML-Schemaauflistung in der Datenbank
Im folgenden Beispiel wird die XML-Schemaauflistung ManuInstructionsSchemaCollection erstellt. Diese Auflistung hat nur einen Schemanamespace.
-- Create a sample database in which to load the XML schema collection.
CREATE DATABASE SampleDB;
GO
USE SampleDB;
GO
CREATE XML SCHEMA COLLECTION ManuInstructionsSchemaCollection
AS N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
xmlns ="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:complexType name="StepType" mixed="true" >
<xsd:choice minOccurs="0" maxOccurs="unbounded" >
<xsd:element name="tool" type="xsd:string" />
<xsd:element name="material" type="xsd:string" />
<xsd:element name="blueprint" type="xsd:string" />
<xsd:element name="specs" type="xsd:string" />
<xsd:element name="diag" type="xsd:string" />
</xsd:choice>
</xsd:complexType>
<xsd:element name="root">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Location" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="step" type="StepType" minOccurs="1" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="LocationID" type="xsd:integer" use="required"/>
<xsd:attribute name="SetupHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="MachineHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="LaborHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="LotSize" type="xsd:decimal" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>';
GO
-- Verify - list of collections in the database.
SELECT *
FROM sys.xml_schema_collections;
-- Verify - list of namespaces in the database.
SELECT name
FROM sys.xml_schema_namespaces;
-- Use it. Create a typed xml variable. Note collection name specified.
DECLARE @x AS XML(ManuInstructionsSchemaCollection);
GO
--Or create a typed xml column.
CREATE TABLE T
(
i INT PRIMARY KEY,
x XML(ManuInstructionsSchemaCollection)
);
GO
-- Clean up
DROP TABLE T;
GO
DROP XML SCHEMA COLLECTION ManuInstructionsSchemaCollection;
GO
USE master;
GO
DROP DATABASE SampleDB;
Alternativ können Sie die Schemaauflistung einer Variablen zuweisen und die Variable in der CREATE XML SCHEMA COLLECTION-Anweisung wie folgt angeben:
DECLARE @MySchemaCollection AS NVARCHAR (MAX);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION MyCollection
AS @MySchemaCollection;
Die Variable im Beispiel ist vom Datentyp nvarchar(max). Die Variable kann auch vom XML-Datentyp sein, in diesem Fall wird sie implizit in eine Zeichenfolge konvertiert.
Weitere Informationen finden Sie unter Anzeigen einer gespeicherten XML-Schemaauflistung.
Sie können Schemasammlungen in einer XML-Typspalte speichern. Führen Sie in diesem Fall zum Erstellen einer XML-Schemaauflistung die folgenden Schritte aus:
Rufen Sie die Schemaauflistung aus der Spalte mithilfe einer
SELECTAnweisung ab, und weisen Sie sie einer Variablen vom XML-Typ oder einem Varchar-Typ zu.Geben Sie den Variablennamen in der
CREATE XML SCHEMA COLLECTIONAnweisung an.
Es CREATE XML SCHEMA COLLECTION werden nur die Schemakomponenten gespeichert, die SQL Server versteht. Alles im XML-Schema wird nicht in der Datenbank gespeichert. Wenn Die XML-Schemaauflistung daher genau die Art und Weise wie sie bereitgestellt werden soll, sollten Sie ihre XML-Schemas in einer Datenbankspalte oder in einem anderen Ordner auf Ihrem Computer speichern.
B. Angeben mehrerer Schemanamespaces in einer Schemaauflistung
Sie können mehrere XML-Schemas angeben, wenn Sie eine XML-Schemaauflistung erstellen. Beispiel:
CREATE XML SCHEMA COLLECTION MyCollection
AS N'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->
</xsd:schema>';
Im folgenden Beispiel wird die XML-Schemaauflistung ProductDescriptionSchemaCollection erstellt, die zwei XML-Schemanamespaces enthält.
CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection
AS '<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="Warranty" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="WarrantyPeriod" type="xsd:string" />
<xsd:element name="Description" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xs:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"
xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"
elementFormDefault="qualified"
xmlns:mstns="https://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" >
<xs:import
namespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" />
<xs:element name="ProductDescription" type="ProductDescription" />
<xs:complexType name="ProductDescription">
<xs:sequence>
<xs:element name="Summary" type="Summary" minOccurs="0" />
</xs:sequence>
<xs:attribute name="ProductModelID" type="xs:string" />
<xs:attribute name="ProductModelName" type="xs:string" />
</xs:complexType>
<xs:complexType name="Summary" mixed="true" >
<xs:sequence>
<xs:any processContents="skip" namespace="http://www.w3.org/1999/xhtml" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>';
GO
-- Clean up
DROP XML SCHEMA COLLECTION ProductDescriptionSchemaCollection;
GO
C. Importieren eines Schemas, das keinen Zielnamespace angibt
Wenn ein Schema, das kein Attribut enthält targetNamespace , in eine Auflistung importiert wird, werden die zugehörigen Komponenten dem leeren Zeichenfolgenzielnamespace zugeordnet, wie im folgenden Beispiel gezeigt. Wenn Sie ein oder mehrere in die Auflistung importierte Schemas nicht zuordnen, werden mehrere Schemakomponenten (potenziell nicht verknüpft) mit dem standardmäßigen leeren Zeichenfolgennamespace verknüpft.
-- Create a collection that contains a schema with no target namespace.
CREATE XML SCHEMA COLLECTION MySampleCollection
AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://ns">
<element name="e" type="dateTime"/>
</schema>';
GO
-- Query will return the names of all the collections that
--contain a schema with no target namespace.
SELECT sys.xml_schema_collections.name
FROM sys.xml_schema_collections
INNER JOIN sys.xml_schema_namespaces
ON sys.xml_schema_collections.xml_collection_id = sys.xml_schema_namespaces.xml_collection_id
WHERE sys.xml_schema_namespaces.name = '';
D: Verwenden einer XML-Schemaauflistung und -batches
Auf eine Schemaauflistung kann nicht im selben Batch verwiesen werden, auf den sie erstellt wird. Wenn Sie versuchen, auf eine Sammlung im selben Batch zu verweisen, in dem sie erstellt wurde, wird eine Fehlermeldung angezeigt, die besagt, dass die Sammlung nicht vorhanden ist. Das folgende Beispiel funktioniert; Wenn Sie jedoch entfernen GO und daher versuchen, auf die XML-Schemaauflistung zu verweisen, um eine XML-Variable im selben Batch einzugeben, wird ein Fehler zurückgegeben.
CREATE XML SCHEMA COLLECTION mySC
AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root" type="string"/>
</schema>
';
GO
CREATE TABLE T
(
Col1 XML(mySC)
);
GO