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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Importa os componentes do esquema para um banco de dados.Imports the schema components into a database.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

ArgumentosArguments

relational_schemarelational_schema
Identifica o nome de esquema relacional.Identifies the relational schema name. Se não for especificado, o esquema relacional padrão será considerado.If not specified, default relational schema is assumed.

sql_identifiersql_identifier
É o identificador SQL para a coleção de esquema XML.Is the SQL identifier for the XML schema collection.

ExpressionExpression
É uma constante de cadeia de caracteres ou variável escalar.Is a string constant or scalar variable. É do tipo varchar, varbinary, nvarchar ou xml.Is varchar, varbinary, nvarchar, or xml type.

RemarksRemarks

Também é possível adicionar novos namespaces à coleção ou adicionar novos componentes a namespaces existentes usando 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.

Para remover coleções, use DROP XML SCHEMA COLLECTION (Transact-SQL).To remove collections, use DROP XML SCHEMA COLLECTION (Transact-SQL).

PermissõesPermissions

A criação de XML SCHEMA COLLECTION requer pelo menos um dos seguintes conjuntos de permissões:To create an XML SCHEMA COLLECTION requires at least one of the following sets of permissions:

  • Permissão CONTROL no servidorCONTROL permission on the server

  • Permissão ALTER ANY DATABASE no servidorALTER ANY DATABASE permission on the server

  • Permissão ALTER no banco de dadosALTER permission on the database

  • Permissão CONTROL no banco de dadosCONTROL permission in the database

  • Permissões ALTER ANY SCHEMA e CREATE XML SCHEMA COLLECTION no banco de dadosALTER ANY SCHEMA permission and CREATE XML SCHEMA COLLECTION permission in the database

  • Permissões ALTER ou CONTROL no esquema relacional e CREATE XML SCHEMA COLLECTION no banco de dadosALTER or CONTROL permission on the relational schema and CREATE XML SCHEMA COLLECTION permission in the database

ExemplosExamples

A.A. Criando uma coleção de esquema XML no banco de dadosCreating XML schema collection in the database

O exemplo a seguir cria uma coleção de esquema XML ManuInstructionsSchemaCollection.The following example creates the XML schema collection ManuInstructionsSchemaCollection. A coleção tem apenas um namespace de esquema.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;  

Opcionalmente, você pode atribuir a coleção de esquema a uma variável e especificar a variável na instrução CREATE XML SCHEMA COLLECTION do seguinte modo: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   

A variável do exemplo é do tipo nvarchar(max).The variable in the example is of nvarchar(max) type. A variável também pode ser do tipo de dados xml e, nesse caso, ela é convertida implicitamente em uma cadeia de caracteres.The variable can also be of xml data type, in which case, it is implicitly converted to a string.

Para obter mais informações, veja Exibir uma coleção de esquemas XML armazenados.For more information, see View a Stored XML Schema Collection.

Você pode armazenar coleções de esquemas em uma coluna do tipo xml.You may store schema collections in an xml type column. Neste caso, para criar a coleção de esquemas XML, faça o seguinte:In this case, to create XML schema collection, perform the following:

  1. Recupere a coleção de esquemas da coluna usando uma instrução SELECT e atribua-a a uma variável do tipo xml ou de um tipo 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. Especifique o nome da variável na instrução CREATE XML SCHEMA COLLECTION.Specify the variable name in the CREATE XML SCHEMA COLLECTION statement.

A instrução CREATE XML SCHEMA COLLECTION armazena somente os componentes do esquema reconhecidos pelo SQL Server; nem tudo que está contido no esquema XML é armazenado no banco de dados.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. Portanto, se desejar que a coleção de esquema XML volte a ser exatamente igual a quando for fornecida, recomendamos que você salve os esquemas XML em uma coluna de banco de dados ou em alguma outra pasta do computador.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.B. Especificando vários namespaces de esquema em uma coleção de esquemasSpecifying multiple schema namespaces in a schema collection

Você pode especificar vários esquemas XML ao criar uma coleção de esquema XML.You can specify multiple XML schemas when you create an XML schema collection. Por exemplo: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>';  

O exemplo a seguir cria a coleção de esquema XML ProductDescriptionSchemaCollection que inclui dois namespaces de esquema 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.C. Importando um esquema que não especifica um namespace de destinoImporting a schema that does not specify a target namespace

Se um esquema que não contém um atributo targetNamespace for importado em uma coleção, seus componentes serão associados ao namespace de destino da cadeia de caracteres vazia, conforme mostrado no exemplo a seguir.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. Observe que a não associação de um ou mais esquemas importados na coleção faz com que vários componentes de esquema (possivelmente não relacionados) sejam associados ao namespace padrão da cadeia de caracteres vazia.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.D. Usando uma coleção de esquemas XML e lotesUsing an XML schema collection and batches

Uma coleção de esquemas não pode ser referenciada no mesmo lote em que é criada.A schema collection cannot be referenced in the same batch where it is created. Se você tentar referenciar uma coleção no mesmo lote em que foi criada, receberá um erro informando que a coleção não existe.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. O exemplo a seguir funciona; entretanto, se você remover GO e tentar referenciar a coleção de esquemas XML para digitar uma variável xml no mesmo lote, será retornado um erro.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  

Consulte TambémSee 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)
Comparar XML digitado com XML não digitado Compare Typed XML to Untyped XML
DROP XML SCHEMA COLLECTION (Transact-SQL) DROP XML SCHEMA COLLECTION (Transact-SQL)
Requisitos e limitações para o uso de Coleções de Esquemas XML no servidorRequirements and Limitations for XML Schema Collections on the Server