Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
Importa los componentes del esquema a la base de datos.
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
Identificador SQL de la colección de esquemas XML.
Expression
Constante de cadena o variable escalar. Es de tipo varchar, varbinary, nvarchar o xml.
Observaciones
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, use DROP XML SCHEMA COLLECTION.
Permisos
Para crear XML SCHEMA COLLECTION se requieren al menos uno de los siguientes conjuntos de permisos:
-
CONTROLpermiso en el servidor -
ALTER ANY DATABASEpermiso en el servidor -
ALTERpermiso en la base de datos -
CONTROLpermiso en la base de datos -
ALTER ANY SCHEMApermiso yCREATE XML SCHEMA COLLECTIONpermiso en la base de datos -
ALTERoCONTROLpermiso en el esquema relacional yCREATE XML SCHEMA COLLECTIONel permiso en la base de datos
Ejemplos
A. Creación de 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 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;
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 AS 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 de tipo de datos xml , en cuyo caso, se convierte implícitamente en una cadena.
Para obtener más información, consulte Visualización de una colección de esquemas XML almacenada.
Puede almacenar colecciones de esquemas en una columna de tipo xml . En este caso, para crear una colección de esquemas XML, realice los pasos siguientes:
Recupere la colección de esquemas de la columna mediante una
SELECTinstrucción y asígnela a una variable de tipo xml o a un tipo varchar .Especifique el nombre de la variable en la
CREATE XML SCHEMA COLLECTIONinstrucción .
Almacena CREATE XML SCHEMA COLLECTION solo los componentes de esquema que SQL Server entiende; todo en el esquema XML no se almacena en la base de datos. Por lo tanto, si desea que la colección de esquemas XML vuelva exactamente a la forma en que se proporcionó, debe guardar 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="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
C. Importar un esquema que no especifique un espacio de nombres de destino
Si un esquema que no contiene un targetNamespace atributo 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. No asociar uno o varios esquemas importados en la colección hace que varios componentes de esquema (potencialmente no relacionados) estén asociados al espacio de nombres de cadena vacío predeterminado.
-- 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. Uso de una colección de esquemas XML y lotes
No se puede hacer referencia a una colección de esquemas en el mismo lote donde se crea. Si intenta hacer referencia a una colección en el mismo lote en el que se creó, obtendrá un error que indica que la colección no existe. En el ejemplo siguiente se trabaja; sin embargo, si quita GO y, por lo tanto, intenta hacer referencia a la colección de esquemas XML para escribir una variable XML en el mismo lote, devuelve 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