Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Importuje součásti schématu do databáze.
Syntaxe
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression
Arguments
relational_schema
Identifikuje název relačního schématu. Pokud není zadáno, předpokládá se výchozí relační schéma.
sql_identifier
Identifikátor SQL pro kolekci schémat XML.
Výraz
Řetězcová konstanta nebo skalární proměnná. Je varchar, varbinary, nvarchar nebo xml typ.
Poznámky
Do kolekce můžete také přidat nové obory názvů nebo přidat nové komponenty do existujících oborů názvů v kolekci pomocí ALTER XML SCHEMA COLLECTION.
Chcete-li odebrat kolekce, použijte DROP XML SCHEMA COLLECTION.
Povolení
Vytvoření KOLEKCE SCHÉMAT XML vyžaduje alespoň jednu z následujících sad oprávnění:
-
CONTROLoprávnění na serveru -
ALTER ANY DATABASEoprávnění na serveru -
ALTERoprávnění k databázi -
CONTROLoprávnění v databázi -
ALTER ANY SCHEMAoprávnění aCREATE XML SCHEMA COLLECTIONoprávnění v databázi -
ALTERneboCONTROLoprávnění k relačnímu schématu aCREATE XML SCHEMA COLLECTIONoprávnění v databázi
Examples
A. Vytvoření kolekce schémat XML v databázi
Následující příklad vytvoří kolekci ManuInstructionsSchemaCollectionschémat XML . Kolekce má pouze jeden obor názvů schématu.
-- 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;
Případně můžete kolekci schémat přiřadit k proměnné a zadat proměnnou v CREATE XML SCHEMA COLLECTION příkazu následujícím způsobem:
DECLARE @MySchemaCollection AS NVARCHAR (MAX);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION MyCollection
AS @MySchemaCollection;
Proměnná v příkladu je typu nvarchar(max) . Proměnná může být také datového typu XML , v takovém případě je implicitně převedena na řetězec.
Další informace naleznete v tématu Zobrazení uložené kolekce schémat XML.
Kolekce schémat můžete uložit ve sloupci typu XML . V tomto případě vytvořte kolekci schémat XML provedením následujících kroků:
Načtěte kolekci schématu ze sloupce pomocí
SELECTpříkazu a přiřaďte ji proměnné typu XML nebo varchar .Zadejte název proměnné v
CREATE XML SCHEMA COLLECTIONpříkazu.
Ukládá pouze komponenty schématu, kterým SQL Server rozumí. Všechno CREATE XML SCHEMA COLLECTION ve schématu XML není uložené v databázi. Proto pokud chcete kolekci schémat XML vrátit přesně tak, jak byla zadána, měli byste schémata XML uložit do databázového sloupce nebo do jiné složky v počítači.
B. Určení více oborů názvů schématu v kolekci schémat
Při vytváření kolekce schémat XML můžete zadat více schémat XML. Například:
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>';
Následující příklad vytvoří kolekci ProductDescriptionSchemaCollection schématu XML, která obsahuje dva obory názvů schématu XML.
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. Import schématu, který neurčuje cílový obor názvů
Pokud je v kolekci importováno schéma, které neobsahuje targetNamespace atribut, jsou jeho komponenty přidruženy k prázdnému cílovému oboru názvů řetězce, jak je znázorněno v následujícím příkladu. Přidružení jednoho nebo více schémat importovaných v kolekci způsobí, že k výchozímu oboru názvů prázdného řetězce bude přidruženo více komponent schématu (potenciálně nesouvisejících).
-- 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. Použití kolekce schématu XML a dávek
Na kolekci schématu nelze odkazovat ve stejné dávce, ve které je vytvořena. Pokud se pokusíte odkazovat na kolekci ve stejné dávce, ve které byla vytvořena, zobrazí se chyba s informací, že kolekce neexistuje. Následující příklad funguje; Pokud však odeberete GO a proto se pokusíte odkazovat na kolekci schématu XML a zadat proměnnou XML ve stejné dávce, vrátí chybu.
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