Friday, January 5, 2007

Campos XML en SQL-2005

En SQL Server 2005 tenemos la posilibilidad de crear campos XML validados con Schema. Que ventajas tiene crear Campos XML con esquema(con tipo) a crearlo sin esquema(sin tipo)?
  1. Garantizar que los datos Xml sean documentos validos.
  2. Garantizar que los datos Xml esten conformes a un modelo y ser validados velozmente por el motor de sql para mantener la integridad de los datos Xml.
  3. Permitir la aplicacion de Indices sobre las columnas Xml para agilizar la consulta del Documento almacenado.
Dependiendo de cual sea nuestro escenario, elejiremos crear Columnas con XML con Esquema si son el mismo. Este articulo se centra en demostrar la creacion de columnas XML con Esquema. Pasos para crear columnas XML con Esquema:
  • 1) Primero debemos crear un Schema XML en la base de datos.
CREATE XML SCHEMA COLLECTION
[Messaging].[MessageModel] AS N'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Message">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="Body" type="xsd:string"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>'
  • 2) Luego debemos crear la tabla con el campo XML donde utilizaremos el SchemaXML creado anteriormente:
CREATE TABLE [Messaging].[Message](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Content] [xml](CONTENT [Messaging].[MessageModel]) NOT NULL,
CONSTRAINT [Message_PK] PRIMARY KEY CLUSTERED ([Id] ASC))
Ahora podremos utilizar la tabla de la siguiente forma:
INSERT INTO [MESSAGING].[MESSAGE](Content) 
VALUES('<Message>
<Body>Este es el mensaje enviado</Body>
</Message>')
Alli insertariamos un registro en la tabla Message con el XML ajustado al EsquemaXML de la columna 'Content'. De esta forma podemos realizar una consulta a la tabla con nuestra columa XML y en SSMS(SQL Server Management Studio) podremos ver los datos de esta forma.

1 comment:

Norwill A Gutiérrez F said...

Gracias por tu comentario johan, es muy interesante lo que has hecho en tu blog y siempre sin perder eso que te caracteriza querer enseñar a los demas.... sigue asi y gracias por compartir tus conocimientos