CREATE XML SCHEMA COLLECTION (Transact-SQL)
Importiert die Schemakomponenten in eine Datenbank.
Syntax
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ]sql_identifier AS Expression
Argumente
relational_schema
Identifiziert den relationalen Schemanamen. Wird kein Wert angegeben, wird vom relationalen Standardschema ausgegangen.sql_identifier
Der SQL-Bezeichner für die XML-Schemaauflistung.Expression
Eine Zeichenfolgenkonstante oder eine skalare Variable. Ist ein Wert vom Datentyp varchar, varbinary, nvarchar oder xml.
Hinweise
Mithilfe von ALTER XML SCHEMA COLLECTION können Sie der Auflistung auch neue Namespaces bzw. vorhandenen Namespaces in der Auflistung auch neue Komponenten hinzufügen.
Verwenden Sie DROP XML SCHEMA COLLECTION (Transact-SQL), um Auflistungen zu entfernen.
Berechtigungen
Zum Erstellen von XML SCHEMA COLLECTION ist zumindest eine der folgenden Berechtigungsgruppen erforderlich:
CONTROL-Berechtigung für den Server
ALTER ANY DATABASE-Berechtigung für den Server
ALTER-Berechtigung für die Datenbank
CONTROL-Berechtigung in der Datenbank
ALTER ANY SCHEMA-Berechtigung und CREATE XML SCHEMA COLLECTION-Berechtigung in der Datenbank
ALTER- oder CONTROL-Berechtigung für das relationale Schema und CREATE XML SCHEMA COLLECTION-Berechtigung in der Datenbank
Beispiele
A. Erstellen einer XML-Schemaauflistung in der Datenbank
Im folgenden Beispiel wird die XML-Schemaauflistung ManuInstructionsSchemaCollection erstellt. Die Auflistung verfügt nur über 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 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 folgendermaßen angeben:
DECLARE @MySchemaCollection 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). Sie kann auch vom Datentyp xml sein und wird in diesem Fall implizit in eine Zeichenfolge konvertiert.
Weitere Informationen finden Sie unter Anzeigen einer gespeicherten XML-Schemaauflistung.
Schemaauflistungen können in einer Spalte vom Datentyp xml gespeichert werden. Führen Sie in diesem Fall Folgendes aus, um eine XML-Schemaauflistung zu erstellen:
Rufen Sie die Schemaauflistung mithilfe einer SELECT-Anweisung aus der Spalte ab und weisen Sie sie einer Variablen vom Datentyp xml oder vom Datentyp varchar zu.
Geben Sie den Variablennamen in der CREATE XML SCHEMA COLLECTION-Anweisung an.
CREATE XML SCHEMA COLLECTION speichert nur die Schemakomponenten, die SQL Server versteht; es wird nicht der gesamte Inhalt des XML-Schemas in der Datenbank gespeichert. Wenn Sie also die XML-Schemaauflistung genau in dem Zustand zurück erhalten möchten, in dem sie bereitgestellt wurde, sollten Sie die XML-Schemas in einer Datenbankspalte oder einem anderen Ordner auf dem Computer speichern.
B. Angeben mehrerer Schemanamespaces in einer Schemaauflistung
Sie können beim Erstellen einer XML-Schemaauflistung mehrere XML-Schemas angeben. 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="https://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="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"
elementFormDefault="qualified"
xmlns:mstns="http://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 ohne Angabe eines Zielnamespaces
Wenn ein Schema, das kein targetNamespace-Attribut enthält, in eine Auflistung importiert wird, werden die Komponenten einem leeren Zeichenfolgen-Zielnamespace zugeordnet (wie im folgenden Beispiel dargestellt). Ist nicht mindestens ein in der Auflistung importiertes Schema zugeordnet, hat dies zur Folge, dass mehrere (potenziell unzusammenhängende) Schemakomponenten dem leeren Standard-Zeichenfolgennamespace zugeordnet werden.
-- 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
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
Es kann nicht auf denselben Batch einer Schemaauflistung verwiesen werden, in dem die Auflistung erstellt wurde. Wenn Sie auf eine Auflistung in demselben Batch verweisen, in dem diese erstellt wurde, erhalten Sie eine Fehlermeldung mit dem Hinweis, dass die Auflistung nicht vorhanden ist. Das folgende Beispiel ist funktionsfähig; wenn Sie jedoch GO entfernen und somit auf die XML-Schemaauflistung verweisen, um eine xml-Variable 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
Siehe auch