Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Importerar schemakomponenterna till en databas.
              
              
              Transact-SQL syntaxkonventioner
Syntax
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression
Arguments
relational_schema
Identifierar namnet på relationsschemat. Om det inte anges antas standardrelationsschemat.
sql_identifier
SQL-identifieraren för XML-schemasamlingen.
Uttryck
En strängkonstant eller skalär variabel. Är varchar, varbinary, nvarchar eller xml-typ .
Anmärkningar
Du kan också lägga till nya namnområden i samlingen eller lägga till nya komponenter i befintliga namnområden i samlingen med hjälp av ALTER XML SCHEMA COLLECTION.
Om du vill ta bort samlingar använder du DROP XML SCHEMA COLLECTION.
Permissions
För att skapa en XML-SCHEMASAMLING krävs minst en av följande behörigheter:
- 
              CONTROLbehörighet på servern
- 
              ALTER ANY DATABASEbehörighet på servern
- 
              ALTERbehörighet för databasen
- 
              CONTROLbehörighet i databasen
- 
              ALTER ANY SCHEMAbehörighet ochCREATE XML SCHEMA COLLECTIONbehörighet i databasen
- 
              ALTERellerCONTROLbehörighet för relationsschemat ochCREATE XML SCHEMA COLLECTIONbehörigheten i databasen
Examples
A. Skapa XML-schemasamling i databasen
I följande exempel skapas XML-schemasamlingen ManuInstructionsSchemaCollection. Samlingen har bara ett schemanamnområde.
-- 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;
Du kan också tilldela schemasamlingen till en variabel och ange variabeln i -instruktionen CREATE XML SCHEMA COLLECTION på följande sätt:
DECLARE @MySchemaCollection AS NVARCHAR (MAX);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION MyCollection
    AS @MySchemaCollection;
Variabeln i exemplet är av nvarchar(max) typen . Variabeln kan också vara av xml-datatyp . I så fall konverteras den implicit till en sträng.
Mer information finns i Visa en lagrad XML-schemasamling.
Du kan lagra schemasamlingar i en xml-typkolumn . I det här fallet utför du följande steg för att skapa XML-schemasamling:
- Hämta schemasamlingen från kolumnen med hjälp av en - SELECT-instruktion och tilldela den till en variabel av XML-typ eller en varchar-typ .
- Ange variabelnamnet i -instruktionen - CREATE XML SCHEMA COLLECTION.
Lagrar CREATE XML SCHEMA COLLECTION endast de schemakomponenter som SQL Server förstår. Allt i XML-schemat lagras inte i databasen. Om du vill att XML-schemasamlingen ska vara exakt som den angavs bör du därför spara XML-scheman i en databaskolumn eller någon annan mapp på datorn.
B. Ange flera schemanamnområden i en schemasamling
Du kan ange flera XML-scheman när du skapar en XML-schemasamling. Till exempel:
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>';
I följande exempel skapas XML-schemasamlingen ProductDescriptionSchemaCollection som innehåller två XML-schemanamnområden.
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. Importera ett schema som inte anger ett målnamnområde
Om ett schema som inte innehåller ett targetNamespace attribut importeras i en samling associeras dess komponenter med det tomma strängmålnamnområdet enligt följande exempel. Om du inte associerar ett eller flera scheman som importerats i samlingen blir flera schemakomponenter (potentiellt orelaterade) associerade med standardnamnet för den tomma strängen.
-- 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. Använda en XML-schemasamling och batchar
Det går inte att referera till en schemasamling i samma batch där den skapas. Om du försöker referera till en samling i samma batch där den skapades får du ett felmeddelande om att samlingen inte finns. Följande exempel fungerar; Men om du tar bort GO och därför försöker referera till XML-schemasamlingen för att skriva en XML-variabel i samma batch returneras ett fel.
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