CREATE XML SCHEMA COLLECTION (Transact-SQL)CREATE XML SCHEMA COLLECTION (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Импортирует компоненты схемы в базу данных.Imports the schema components into a database.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

  
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ]sql_identifier AS Expression  

АргументыArguments

relational_schemarelational_schema
Определяет имя реляционной схемы.Identifies the relational schema name. Если значение не указано, то применяется реляционная схема по умолчанию.If not specified, default relational schema is assumed.

sql_identifiersql_identifier
Идентификатор SQL для коллекции XML-схем.Is the SQL identifier for the XML schema collection.

ВыражениеExpression
Строковая константа или скалярная переменная.Is a string constant or scalar variable. Имеет тип varchar, varbinary, nvarchar или xml.Is varchar, varbinary, nvarchar, or xml type.

RemarksRemarks

С помощью инструкции ALTER XML SCHEMA COLLECTION можно добавлять новые пространства имен к коллекции или новые компоненты к существующим пространствам имен в коллекции.You can also add new namespaces to the collection or add new components to existing namespaces in the collection by using ALTER XML SCHEMA COLLECTION.

Чтобы удалить коллекции, используйте DROP XML SCHEMA COLLECTION (Transact-SQL).To remove collections, use DROP XML SCHEMA COLLECTION (Transact-SQL).

РазрешенияPermissions

Для создания коллекции XML SCHEMA COLLECTION требуется, по крайней мере, один из следующих наборов разрешений:To create an XML SCHEMA COLLECTION requires at least one of the following sets of permissions:

  • разрешение CONTROL на сервере;CONTROL permission on the server

  • разрешение ALTER ANY DATABASE на сервере;ALTER ANY DATABASE permission on the server

  • разрешение ALTER в базе данных;ALTER permission on the database

  • разрешение CONTROL в базе данных;CONTROL permission in the database

  • разрешения ALTER ANY SCHEMA и CREATE XML SCHEMA COLLECTION в базе данных;ALTER ANY SCHEMA permission and CREATE XML SCHEMA COLLECTION permission in the database

  • разрешение ALTER или CONTROL в реляционной схеме и разрешение CREATE XML SCHEMA COLLECTION в базе данных.ALTER or CONTROL permission on the relational schema and CREATE XML SCHEMA COLLECTION permission in the database

ПримерыExamples

A.A. Создание коллекции схем XML в базе данныхCreating XML schema collection in the database

Следующие примеры создают коллекцию XML-схем ManuInstructionsSchemaCollection.The following example creates the XML schema collection ManuInstructionsSchemaCollection. Коллекция имеет только одно пространство имен схемы.The collection has only one schema namespace.

-- 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 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 следующим образом:Alternatively, you can assign the schema collection to a variable and specify the variable in the CREATE XML SCHEMA COLLECTION statement as follows:

DECLARE @MySchemaCollection nvarchar(max)  
Set @MySchemaCollection  = N' copy the schema collection here'  
CREATE XML SCHEMA COLLECTION MyCollection AS @MySchemaCollection   

Переменная в примере принадлежит к типу nvarchar(max).The variable in the example is of nvarchar(max) type. Переменная также может принадлежать к типу данных xml, и в таком случае она неявно преобразуется в строку.The variable can also be of xml data type, in which case, it is implicitly converted to a string.

Дополнительные сведения см. в разделе Просмотр хранимой коллекции схем XML.For more information, see View a Stored XML Schema Collection.

Коллекции схем можно хранить в столбце типа xml.You may store schema collections in an xml type column. В этом случае для создания коллекции XML-схем необходимо выполнить следующее:In this case, to create XML schema collection, perform the following:

  1. Получите коллекцию схем из столбца с помощью инструкции SELECT и свяжите ее с переменной типа xml или varchar.Retrieve the schema collection from the column by using a SELECT statement and assign it to a variable of xml type, or a varchar type.

  2. Укажите имя переменной в инструкции CREATE XML SCHEMA COLLECTION.Specify the variable name in the CREATE XML SCHEMA COLLECTION statement.

Инструкция CREATE XML SCHEMA COLLECTION сохраняет только такие компоненты схемы, которые понятны для SQL Server; все остальные элементы XML-схемы в базе данных не сохраняются.The CREATE XML SCHEMA COLLECTION stores only the schema components that SQL Server understands; everything in the XML schema is not stored in the database. Таким образом, если нужно получить коллекцию XML-схем в том виде, в котором она была предоставлена, рекомендуется сохранять XML-схемы в столбце базы данных или в другой папке компьютера.Therefore, if you want the XML schema collection back exactly the way it was supplied, we recommend that you save your XML schemas in a database column or some other folder on your computer.

Б.B. Указание нескольких пространств имен схем в коллекции схемSpecifying multiple schema namespaces in a schema collection

Можно указать несколько XML-схем при создании коллекции XML-схем.You can specify multiple XML schemas when you create an XML schema collection. Пример:For example:

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-схем.The following example creates the XML schema collection ProductDescriptionSchemaCollection that includes two XML schema namespaces.

CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS   
'<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"  
    xmlns="https://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="https://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. Импорт схемы, не указывающей целевое пространство именImporting a schema that does not specify a target namespace

Если схема, не содержащая атрибут targetNamespace, импортируется в коллекцию, ее компоненты связываются с пустой строкой в качестве целевого пространства имен, как показано в следующем примере.If a schema that does not contain a targetNamespace attribute is imported in a collection, its components are associated with the empty string target namespace as shown in the following example. Обратите внимание на то, что отсутствие связывания одной или нескольких схем, импортированных в коллекцию, приводит к тому, что некоторые компоненты схемы (потенциально несвязанные) будут связаны с целевым пространством имен по умолчанию в виде пустой строки.Note that not associating one or more schemas imported in the collection causes multiple schema components (potentially unrelated) to be associated with the default empty string namespace.

-- 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   
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. Использование коллекций и пакетов схем XMLUsing an XML schema collection and batches

На коллекцию схем нельзя ссылаться в том же пакете, в котором эта коллекция была создана.A schema collection cannot be referenced in the same batch where it is created. При попытке сослаться на коллекцию в том же пакете, где коллекция была создана, возникнет ошибка, сообщающая, что коллекция не существует.If you try to reference a collection in the same batch where it was created, you will get an error saying the collection does not exist. Выполнение следующего примера возможно; однако если удалить строку кода GO и таким образом попытаться заставить коллекцию XML-схем напечатать имя переменной xml в том же пакете, то будет возвращена ошибка.The following example works; however, if you remove GO and, therefore, try to reference the XML schema collection to type an xml variable in the same batch, it will return an error.

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  

См. также:See Also

ALTER XML SCHEMA COLLECTION (Transact-SQL) ALTER XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL) DROP XML SCHEMA COLLECTION (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
Сравнение типизированного и нетипизированного XML Compare Typed XML to Untyped XML
DROP XML SCHEMA COLLECTION (Transact-SQL) DROP XML SCHEMA COLLECTION (Transact-SQL)
Требования и ограничения для коллекций схем XML на сервереRequirements and Limitations for XML Schema Collections on the Server