Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
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