Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Импортирует компоненты схемы в базу данных.
Соглашения о синтаксисе Transact-SQL
Синтаксис
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression
Аргументы
relational_schema
Определяет имя реляционной схемы. Если значение не указано, то применяется реляционная схема по умолчанию.
sql_identifier
Идентификатор SQL для коллекции схем XML.
Выражение
Строковая константа или скалярная переменная. Имеет тип varchar, varbinary, nvarchar или xml.
Замечания
С помощью инструкции ALTER XML SCHEMA COLLECTION можно добавлять новые пространства имен к коллекции или новые компоненты к существующим пространствам имен в коллекции.
Чтобы удалить коллекции, используйте DROP XML SCHEMA COLLECTION.
Разрешения
Для создания коллекции XML SCHEMA COLLECTION требуется, по крайней мере, один из следующих наборов разрешений:
-
CONTROLразрешение на сервере -
ALTER ANY DATABASEразрешение на сервере -
ALTERразрешение на базу данных -
CONTROLразрешение в базе данных -
ALTER ANY SCHEMAразрешение иCREATE XML SCHEMA COLLECTIONразрешение в базе данных -
ALTERилиCONTROLразрешение на реляционную схему иCREATE XML SCHEMA COLLECTIONразрешение в базе данных
Примеры
А. Создание коллекции схем XML в базе данных
Следующие примеры создают коллекцию XML-схем ManuInstructionsSchemaCollection. Коллекция имеет только одно пространство имен схемы.
-- 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;
В качестве альтернативы можно связать коллекцию схем с переменной и указать переменную в инструкции CREATE XML SCHEMA COLLECTION следующим образом:
DECLARE @MySchemaCollection AS NVARCHAR (MAX);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION MyCollection
AS @MySchemaCollection;
Переменная в примере принадлежит к типу nvarchar(max). Переменная также может иметь тип данных XML , в этом случае он неявно преобразуется в строку.
Дополнительные сведения см. в разделе "Просмотр хранимой коллекции схем XML".
Вы можете хранить коллекции схем в столбце типа XML . В этом случае для создания коллекции схем XML выполните следующие действия.
Извлеките коллекцию схем из столбца с помощью
SELECTинструкции и назначьте ее переменной типа XML или типа varchar .Укажите имя переменной в инструкции
CREATE XML SCHEMA COLLECTION.
В базе данных хранятся только компоненты схемы, которые понимает SQL Server. Все CREATE XML SCHEMA COLLECTION , что находится в схеме XML, не хранится в базе данных. Таким образом, если вы хотите, чтобы коллекция схем XML возвращалась точно так же, как она была предоставлена, следует сохранить xml-схемы в столбце базы данных или в другой папке на компьютере.
B. Указание нескольких пространств имен схемы в коллекции схем
Можно указать несколько XML-схем при создании коллекции XML-схем. Например:
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>';
В следующем примере создается коллекция XML-схем ProductDescriptionSchemaCollection, которая включает два пространства имен 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
В. Импорт схемы, которая не указывает целевое пространство имен
Если схема, которая не содержит targetNamespace атрибут, импортируется в коллекцию, его компоненты связаны с пустым пространством имен целевого объекта строки, как показано в следующем примере. Не связывание одной или нескольких схем, импортированных в коллекцию, приводит к тому, что несколько компонентов схемы (потенциально не связаны) с пустым пространством имен строк по умолчанию.
-- 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. Использование коллекции и пакетов схемы XML
На коллекцию схем нельзя ссылаться в том же пакете, на который она создана. Если вы пытаетесь ссылаться на коллекцию в том же пакете, где она была создана, вы получите сообщение об ошибке о том, что коллекция не существует. В следующем примере работает; однако при удалении GO и, следовательно, попробуйте ссылаться на коллекцию схем XML, чтобы ввести переменную XML в том же пакете, она возвращает ошибку.
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