Compartir a través de


CREATE XML SCHEMA COLLECTION (Transact-SQL)

Importa los componentes del esquema a la base de datos.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • relational_schema
    Identifica el nombre del esquema relacional. Si no se especifica, se asume el esquema relacional predeterminado.

  • sql_identifier
    Es el identificador de SQL para la colección del esquema XML.

  • Expression
    Es una constante de cadena o una variable escalar. Es de tipo varchar, varbinary, nvarchar o xml.

Comentarios

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.

Para quitar colecciones, utilice DROP XML SCHEMA COLLECTION (Transact-SQL).

Permisos

Para crear XML SCHEMA COLLECTION se requieren al menos uno de los siguientes conjuntos de permisos:

  • Permiso CONTROL en el servidor

  • Permiso ALTER ANY DATABASE en el servidor

  • Permiso ALTER en la base de datos

  • Permiso CONTROL en la base de datos

  • Permiso ALTER ANY SCHEMA y permiso CREATE XML SCHEMA COLLECTION en la base de datos

  • Permiso ALTER o CONTROL en el esquema relacional y permiso CREATE XML SCHEMA COLLECTION en la base de datos

Ejemplos

A.Crear una colección de esquemas XML en la base de datos

En el ejemplo siguiente se crea la colección de esquemas XML ManuInstructionsSchemaCollection. La colección solo tiene un espacio de nombres de esquema.

-- 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:

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). La variable también puede ser del tipo de datos xml, en cuyo caso, se convierte de forma implícita a una cadena.

Para obtener más información, vea Ver una colección de esquemas XML almacenada.

Puede almacenar colecciones de esquemas en una columna de tipo xml. En este caso, para crear la colección de esquemas XML, realice lo siguiente:

  1. Recupere la colección de esquemas de la columna con una instrucción SELECT y asígnela a una variable de tipo xml o varchar.

  2. Especifique el nombre de la variable en la instrucción CREATE XML SCHEMA COLLECTION.

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. 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.

B.Especificar varios espacios de nombres de esquema en una colección de esquemas

Al crear una colección de esquemas XML, puede especificar varios esquemas XML. Por ejemplo:

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.

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="http://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.Importar un esquema que no especifique un espacio de nombres de destino

Si un esquema que no contiene el atributo targetNamespace (espacio de nombres de destino) se importa en una colección, sus componentes se asocian al espacio de nombres de destino de cadena vacía, tal como se muestra en el ejemplo siguiente. 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.

-- 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.Usar lotes y una colección de esquemas XML

No se puede hacer referencia a una colección de esquemas en el mismo lote en que se creó. 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. 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.

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

Vea también

Referencia

ALTER XML SCHEMA COLLECTION (Transact-SQL)

DROP XML SCHEMA COLLECTION (Transact-SQL)

EVENTDATA (Transact-SQL)

DROP XML SCHEMA COLLECTION (Transact-SQL)

Requisitos y limitaciones de las colecciones de esquemas XML en el servidor

Conceptos

Comparar XML con tipo y XML sin tipo