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

SE APLICA A: síSQL Server síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Importa los componentes del esquema a la base de datos.Imports the schema components into a database.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

relational_schemarelational_schema
Identifica el nombre del esquema relacional.Identifies the relational schema name. Si no se especifica, se asume el esquema relacional predeterminado.If not specified, default relational schema is assumed.

sql_identifiersql_identifier
Es el identificador de SQL para la colección de esquemas XML.Is the SQL identifier for the XML schema collection.

ExpresiónExpression
Es una constante de cadena o una variable escalar.Is a string constant or scalar variable. Es de tipo varchar, varbinary, nvarchar o xml.Is varchar, varbinary, nvarchar, or xml type.

NotasRemarks

También puede agregar nuevos espacios de nombres a la colección o agregar nuevos componentes a espacios de nombres existentes en la colección con 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 quitar colecciones, use DROP XML SCHEMA COLLECTION (Transact-SQL).To remove collections, use DROP XML SCHEMA COLLECTION (Transact-SQL).

PermisosPermissions

Para crear XML SCHEMA COLLECTION se requieren al menos uno de los siguientes conjuntos de permisos:To create an XML SCHEMA COLLECTION requires at least one of the following sets of permissions:

  • Permiso CONTROL en el servidorCONTROL permission on the server

  • Permiso ALTER ANY DATABASE en el servidorALTER ANY DATABASE permission on the server

  • Permiso ALTER en la base de datosALTER permission on the database

  • Permiso CONTROL en la base de datosCONTROL permission in the database

  • Permiso ALTER ANY SCHEMA y permiso CREATE XML SCHEMA COLLECTION en la base de datosALTER ANY SCHEMA permission and CREATE XML SCHEMA COLLECTION permission in the database

  • Permiso ALTER o CONTROL en el esquema relacional y permiso CREATE XML SCHEMA COLLECTION en la base de datosALTER or CONTROL permission on the relational schema and CREATE XML SCHEMA COLLECTION permission in the database

EjemplosExamples

A.A. Crear una colección de esquemas XML en la base de datosCreating XML schema collection in the database

En el ejemplo siguiente se crea la colección de esquemas XML ManuInstructionsSchemaCollection.The following example creates the XML schema collection ManuInstructionsSchemaCollection. La colección solo tiene un espacio de nombres 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;  

También puede asignar la colección de esquemas a una variable y especificar la variable en la instrucción CREATE XML SCHEMA COLLECTION de la forma siguiente: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   

La variable del ejemplo es de tipo nvarchar(max).The variable in the example is of nvarchar(max) type. La variable también puede ser del tipo de datos xml; si es así, se convierte de forma implícita en una cadena.The variable can also be of xml data type, in which case, it is implicitly converted to a string.

Para obtener más información, vea Ver una colección de esquemas XML almacenada.For more information, see View a Stored XML Schema Collection.

Puede almacenar colecciones de esquemas en una columna de tipo xml.You may store schema collections in an xml type column. En este caso, para crear la colección de esquemas XML, realice lo siguiente:In this case, to create XML schema collection, perform the following:

  1. Recupere la colección de esquemas de la columna mediante una instrucción SELECT y asígnela a una variable de tipo xml o 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 el nombre de la variable en la instrucción CREATE XML SCHEMA COLLECTION.Specify the variable name in the CREATE XML SCHEMA COLLECTION statement.

CREATE XML SCHEMA COLLECTION solo almacena los componentes del esquema que SQL Server entiende; en la base de datos no se almacena todo lo que está en el esquema 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. Por lo tanto, si desea recuperar la colección de esquemas XML tal como fue suministrada, es recomendable que guarde los esquemas XML en una columna de base de datos o en alguna otra carpeta del equipo.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. Especificar varios espacios de nombres de esquema en una colección de esquemasSpecifying multiple schema namespaces in a schema collection

Al crear una colección de esquemas XML, puede especificar varios esquemas XML.You can specify multiple XML schemas when you create an XML schema collection. Por ejemplo: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>';  

En el ejemplo siguiente se crea la colección de esquemas XML ProductDescriptionSchemaCollection, que incluye dos espacios de nombres 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. Importar un esquema que no especifique un espacio de nombres de destinoImporting a schema that does not specify a target namespace

Si un esquema que no contiene un atributo targetNamespace se importa en una colección, sus componentes se asocian al espacio de nombres de destino de cadena vacío, como se muestra en el ejemplo siguiente.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. Tenga en cuenta que no asociar uno o varios esquemas importados a la colección provoca que varios componentes del esquema (potencialmente no relacionados) se asocien con el espacio de nombres de cadena vacía.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. Usar lotes y una colección de esquemas XMLUsing an XML schema collection and batches

No se puede hacer referencia a una colección de esquemas en el mismo lote en que se creó.A schema collection cannot be referenced in the same batch where it is created. Si intenta hacer referencia a una colección en el mismo lote en que se creó, recibirá un error que indica que la colección no 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. El siguiente ejemplo funciona; no obstante, si quita GO y, por tanto, intenta hacer referencia a la colección de esquemas XML para escribir una variable xml en el mismo lote, devolverá un error.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 tambiénSee 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 con tipo y XML sin tipo Compare Typed XML to Untyped XML
DROP XML SCHEMA COLLECTION (Transact-SQL) DROP XML SCHEMA COLLECTION (Transact-SQL)
Requisitos y limitaciones de las colecciones de esquemas XML en el servidorRequirements and Limitations for XML Schema Collections on the Server