XML con tipo y sin tipo
Se pueden crear variables, parámetros y columnas del tipo de datos xml. Opcionalmente, se puede asociar una colección de esquemas XML a una variable, a un parámetro o a una columna de tipo xml. En este caso, se dice que la instancia del tipo de datos xml es una instancia con tipo. En los demás casos, se dice que la instancia XML es una instancia sin tipo.
Un esquema XML proporciona lo siguiente:
- Restricciones de validación
Siempre que se asigna o modifica una instancia XML con tipo, SQL Server valida la instancia. - Información sobre el tipo de datos de los datos de la instancia
Los esquemas proporcionan información sobre los tipos de atributos y elementos de la instancia de tipo de datos xml. La información de tipo proporciona a los valores semántica operacional más precisa. Por ejemplo, se pueden realizar operaciones aritméticas con decimales en un valor decimal, pero no en un valor de cadena. Por este motivo, el almacenamiento de XML con tipo puede ser mucho más compacto que el de XML sin tipo.
Para poder crear variables, parámetros o columnas xml con tipo, primero es necesario registrar la colección de esquemas XML mediante CREATE XML SCHEMA COLLECTION. Después, se puede asociar la colección de esquemas XML a variables, parámetros o columnas del tipo de datos xml. Los ejemplos siguientes muestran cómo se lleva a cabo:
Ejemplos
En los ejemplos siguientes se utiliza una convención de nomenclatura de dos partes para especificar el nombre de la colección de esquemas XML. La primera parte corresponde al nombre de esquema de AdventureWorks y la segunda corresponde al nombre de la colección de esquemas XML.
A. Crear una variable de tipo xml y asociarle una colección de esquemas
En el ejemplo siguiente se crea una variable de tipo xml y se le asocia una colección de esquemas. La colección de esquemas especificada en el ejemplo ya se ha importado a la base de datos AdventureWorks.
DECLARE @x xml (Production.ProductDescriptionSchemaCollection)
B. Crear una tabla con una columna de tipo xml y especificar un esquema para la columna
En el ejemplo siguiente se crea una tabla con una columna de tipo xml y se especifica un esquema para la columna:
CREATE TABLE T1(
Col1 int,
Col2 xml (Production.ProductDescriptionSchemaCollection))
C. Pasar un parámetro de tipo xml a un procedimiento almacenado
En el ejemplo siguiente se pasa un parámetro de tipo xml a un procedimiento almacenado y se especifica un esquema para la variable:
CREATE PROCEDURE SampleProc
@ProdDescription xml (Production.ProductDescriptionSchemaCollection)
AS
Tenga en cuenta lo siguiente sobre la colección de esquemas XML:
- Una colección de esquemas XML sólo está disponible en la base de datos en la que se ha registrado mediante CREATE XML SCHEMA COLLECTION.
- Si se realiza la conversión de una cadena a un tipo de datos xml con tipo, el análisis también realiza la validación y la conversión de tipos, de acuerdo con los espacios de nombres de los esquemas XML de la colección especificada.
- Es posible convertir un tipo de datos xml con tipo en un tipo de datos xml sin tipo, y viceversa.
Para obtener más información sobre otras maneras de generar XML en SQL Server, vea Generar instancias XML. Una vez generado el XML, se puede asignar a una variable del tipo de datos xml o se puede almacenar en columnas de tipo xml para su posterior procesamiento.
En la jerarquía de tipos de datos, el tipo de datos xml aparece por debajo de sql_variant y los tipos definidos por el usuario, pero por encima de los tipos integrados.
D. Especificar aspectos para restringir una columna XML con tipo
En las columnas xml con tipo se puede restringir la columna para permitir que sólo se almacene en ella un único elemento de nivel superior para cada instancia. Para ello, se especifica el aspecto opcional DOCUMENT
cuando se crea una tabla, como se muestra en el ejemplo siguiente:
CREATE TABLE T(Col1 xml
(DOCUMENT Production.ProductDescriptionSchemaCollection))
GO
DROP TABLE T
GO
De manera predeterminada, las instancias se almacenan en la columna xml con tipo como contenido XML y no como documentos XML. Esto permite lo siguiente:
- Cero o varios elementos de nivel superior
- Nodos de texto en elementos de nivel superior
Este comportamiento también se puede especificar explícitamente, agregando el aspecto CONTENT
, tal y como se muestra en el ejemplo siguiente:
CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection))
GO -- Default
Tenga en cuenta que puede especificar los aspectos DOCUMENT/CONTENT opcionales en cualquier lugar donde defina un tipo xml (XML con tipo). Por ejemplo, cuando se crea una variable xml con tipo, se puede agregar el aspecto DOCUMENT/CONTENT, como se muestra a continuación:
declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection)
Vea también
Conceptos
Generar instancias XML
Lenguaje de manipulación de datos XML (XML DML)
Tipo de datos xml
Aplicaciones XML de ejemplo