Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Hiermee importeert u de schemaonderdelen in een database.
              
              
              Transact-SQL syntaxis-conventies
Syntaxis
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression
Arguments
relational_schema
Hiermee wordt de naam van het relationele schema geïdentificeerd. Als dit niet is opgegeven, wordt ervan uitgegaan dat het standaard relationele schema wordt gebruikt.
sql_identifier
De SQL-id voor de XML-schemaverzameling.
Uitdrukking
Een tekenreeksconstante of scalaire variabele. Is varchar, varbinary, nvarchar of xml-type .
Opmerkingen
U kunt ook nieuwe naamruimten toevoegen aan de verzameling of nieuwe onderdelen toevoegen aan bestaande naamruimten in de verzameling met behulp van ALTER XML SCHEMA COLLECTION.
Als u verzamelingen wilt verwijderen, gebruikt u DROP XML SCHEMA COLLECTION.
Permissions
Voor het maken van een XML-SCHEMAVERZAMELING zijn ten minste een van de volgende sets machtigingen vereist:
- 
              CONTROLmachtiging op de server
- 
              ALTER ANY DATABASEmachtiging op de server
- 
              ALTERmachtiging voor de database
- 
              CONTROLmachtiging in de database
- 
              ALTER ANY SCHEMAmachtiging enCREATE XML SCHEMA COLLECTIONmachtiging in de database
- 
              ALTERofCONTROLmachtiging voor het relationele schema enCREATE XML SCHEMA COLLECTIONde machtiging in de database
Voorbeelden
Eén. XML-schemaverzameling maken in de database
In het volgende voorbeeld wordt de XML-schemaverzameling ManuInstructionsSchemaCollectiongemaakt. De verzameling heeft slechts één schemanaamruimte.
-- 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;
U kunt de schemaverzameling ook als volgt toewijzen aan een variabele en de variabele in de CREATE XML SCHEMA COLLECTION instructie als volgt opgeven:
DECLARE @MySchemaCollection AS NVARCHAR (MAX);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION MyCollection
    AS @MySchemaCollection;
De variabele in het voorbeeld is van nvarchar(max) het type. De variabele kan ook van het xml-gegevenstype zijn. In dat geval wordt deze impliciet geconverteerd naar een tekenreeks.
Zie Een opgeslagen XML-schemaverzameling weergeven voor meer informatie.
U kunt schemaverzamelingen opslaan in een xml-typekolom . Voer in dit geval de volgende stappen uit om een XML-schemaverzameling te maken:
- Haal de schemaverzameling op uit de kolom met behulp van een - SELECTinstructie en wijs deze toe aan een variabele van het XML-type of een varchar-type .
- Geef de naam van de variabele op in de - CREATE XML SCHEMA COLLECTIONinstructie.
Hiermee CREATE XML SCHEMA COLLECTION worden alleen de schemaonderdelen opgeslagen die SQL Server begrijpt. Alles in het XML-schema wordt niet opgeslagen in de database. Als u de XML-schemaverzameling daarom precies wilt terugzetten zoals deze is opgegeven, moet u uw XML-schema's opslaan in een databasekolom of een andere map op uw computer.
B. Meerdere schemanaamruimten opgeven in een schemaverzameling
U kunt meerdere XML-schema's opgeven wanneer u een XML-schemaverzameling maakt. Voorbeeld:
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>';
In het volgende voorbeeld wordt de XML-schemaverzameling ProductDescriptionSchemaCollection gemaakt die twee XML-schemanaamruimten bevat.
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. Een schema importeren dat geen doelnaamruimte opgeeft
Als een schema dat geen kenmerk bevat targetNamespace , wordt geïmporteerd in een verzameling, worden de bijbehorende onderdelen gekoppeld aan de lege doelnaamruimte van de tekenreeks, zoals wordt weergegeven in het volgende voorbeeld. Als u een of meer schema's die in de verzameling zijn geïmporteerd niet koppelt, worden meerdere schemaonderdelen (mogelijk niet-gerelateerd) gekoppeld aan de standaard lege tekenreeksnaamruimte.
-- 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. Een XML-schemaverzameling en -batches gebruiken
Er kan niet naar een schemaverzameling worden verwezen in dezelfde batch waarin deze wordt gemaakt. Als u probeert te verwijzen naar een verzameling in dezelfde batch waarin deze is gemaakt, krijgt u een foutmelding dat de verzameling niet bestaat. Het volgende voorbeeld werkt; Als u echter verwijdert GO en daarom probeert te verwijzen naar de XML-schemaverzameling om een XML-variabele in dezelfde batch te typen, wordt er een fout geretourneerd.
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