Você está na página 1de 135

Programa Completo

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

Mdulo I: Diseo de una base de datos


Tema 1:Teora de sistemas de base de datos relacional
Conceptos bsicos
Que es un sistema de base de datos?
El modelo Relacional
Terminologa relacional

Tema 2: Introduccin al diseo de bases de datos


Componentes de una base de datos SQL Server
Normalizar un diseo de base de datos
. Lograr una base de datos bien diseada
Relaciones entre entidades
. Relaciones entre tablas uno-a-uno
. Relaciones entre tablas uno-a-muchos
. Relacin entre tablas muchos-a-muchos

Tema 3: Elementos adicionales para el diseo una base de datos SQL Server
Archivos y Grupos de archivos
. Reglas para disear Archivos y Grupos de archivos
. Grupos de archivos predefinido
. Recomendaciones
Registros de transacciones
Ambiente
. Estimar el Tamao de una base de datos
. Diseo fsico de la base de datos
Algunas consideraciones sobre instalacin de SQL Server
. Seguridad
. Planificar la Seguridad
. Niveles de seguridad
. Modos de autenticacin

Tema 4: Identificar los requerimientos de diseo


El Proceso de Identificar los Requerimientos de diseo
Identificar las Metas del Sistema
Identificar la Cantidad y Tipos de Datos
Identificar Cmo se usarn los Datos
Identificar las Reglas Comerciales del Sistema

Tema 5: Desarrollar un modelo lgico de base de datos


Identificar Entidades y Sus Atributos
Identificando Relaciones Entre las Entidades
Identificar Restricciones sobre los Datos

Ejercicios Prcticos

Mdulo II: Implementar una base de datos y sus tablas


Tema 1: Crear y administrar una base de datos SQLServer
Mtodos para crear una base de datos SQLServer
. El comando CREATE DATABASE
. Usar el Enterprise Manager
. El asistente Create Database
Administrar una base de datos SQL Server
. Ver informacin referida a la base de datos
Modificar una base de datos
. Configurar opciones de la base de datos
Borrar una base de datos SQL Server

Tema 2: Identificar Tipos de Datos


Tipos de datos provistos por el sistema
Tipos de datos definidos por el usuario

Tema 3: Crear y administrar tablas en SQL Server


Crear tablas en una base de datos SQL-Server
. Determinar la anulabilidad de las columnas
. Definir valores por defecto
. Auto numeracin y columnas de identificacin
Crear columnas de identificacin

http://www.sqlmax.com/centro/programa.asp (1 de 4)20/11/2007 04:04:20 a.m.


Programa Completo

Propiedad IDENTITY
Identificadores globalmente nicos
. Mtodos para crear tablas
Comando CREATE TABLE
Enterprise Manager
Database Designer (Diseador de base de datos)
Administrar tablas de una base de datos SQL Server
. Consultar informacin sobre tablas
. Modificar tablas de una base de datos SQL Server
. Borrar tablas de una base de datos SQL Server

Tema 4: Implementar la integridad de los datos


Introduccin a la integridad de los datos
. Asegurar la integridad de los datos
. Tipos de Dato
. Definiciones NOT NULL
. Definiciones DEFAULT
. Propiedades IDENTITY
. Restricciones (constraints)
. Reglas (rules)
. Desencadenadores
. Indices
Tipos de Integridad de datos
. Integridad de entidad
. Integridad de dominio
. Integridad referencial
. Integridad definida por el usuario
Implementar restricciones de integridad
. Introduccin a las restricciones de integridad
. Restricciones PRIMARY KEY
Crear restricciones PRIMARY KEY
. Restricciones UNIQUE
Crear restricciones UNIQUE
. Restricciones FOREIGN KEY
Crear restricciones FOREIGN KEY
Deshabilitar restricciones FOREIGN KEY
. Restricciones CHECK
Crear restricciones CHECK
Deshabilitar restricciones CHECK

Tema 5: Implementar ndices


Introduccin
Arquitectura de los ndices
. Propsito y estructura
. Tipos de ndices
. ndices agrupados
. ndices no agrupados
. Caractersticas de los ndices
Unicidad
ndices compuestos
Factor de llenado
Sentido de ordenamiento
. Informacin sobre ndices
. Indexado Full-Text
Crear y administrar ndices
. Crear ndices
Usar interfase grfica
Usar comandos Transact-SQL
. Administrar ndices
Eliminar un ndice
Reconstruir un ndice
Renombrar un ndice
. Elegir un ndice
ndices agrupados
ndices no agrupados
. Recubrimiento de ndice
. ndices compuesto frente a ndices mltiples

Mdulo III: Consultar y modificar datos


Tema 1: Principios de lgebra relacional
Operaciones relacionales
. Restriccin
. Proyeccin
. Producto
. Unin
. Interseccin
. Diferencia

http://www.sqlmax.com/centro/programa.asp (2 de 4)20/11/2007 04:04:20 a.m.


Programa Completo

. Reunin
. Divisin
Clculo relacional
. Listas objetivo
. Expresiones

Tema 2: Consultar a los datos en una base de datos SQL Server


Los fundamentos del comando SELECT
El comando SELECT
. Usar clusulas en la lista de seleccin
La clusula DISTINCT
La clusula TOP n
La clusula AS
Tipos de informacin en la lista de seleccin
La clusula INTO
La clusula FROM
Las clusulas WHERE, GROUP BY, y HAVING
. La clusula GROUP BY
. Procesar las clusulas WHERE, GROUP BY , y HAVING
La clusula ORDER BY

Tema 3: Usar tcnicas de consulta avanzadas para acceder a los datos


Usar combinaciones para recuperar datos
. Combinaciones INNER
. Combinaciones OUTER
Usar LEFT OUTER JOIN
Usar RIGHT OUTER JOIN
Usar FULL OUTER JOIN
. Definir subconsutas dentro del comando SELECT
. Tipos de Subconsultas
Subconsultas que son usadas con IN y NOT IN
Subconsultas que son usadas con operadores de comparacin
Subconsultas que son usadas con EXISTS y NOT EXISTS
Resumir datos
. Usar el operador CUBE para resumir datos
. Usar el operador ROLLUP para resumir datos

Tema 4: Modificar datos en una base de datos SQL Server


Insertar datos en un base de datos SQL Server
. Usar el comando INSERT para agregar datos
Usar el comando INSERT...VALUES para agregar datos
Usar una subconsulta SELECT para agregar datos
. Usar un comando SELECT...INTO para agregar datos
. Agregar texto o imgenes a filas ya insertadas
Modificar datos en una base de datos SQL Server
. Usar el comando UPDATE para modificar datos
Usar la clusula SET para modificar datos
Usar la clusula WHERE para modificar datos
Usar la clusula FROM para modificar datos
Modificar textos o imgenes
Borrar datos de una base de datos SQL Server
. Usar el comando DELETE para borrar datos
. Usar el comando TRUNCATE TABLE para borrar datos

Mdulo IV: Implementar procedimientos almacenados


Tema 1: Introduccin a los procedimientos almacenados
Propsitos y ventajas de los Procedimientos Almacenados
. Rendimiento
Marco de programacin
Seguridad
Categoras de procedimientos almacenados
. Procedimientos almacenados del sistema
. Procedimientos almacenados locales
. Procedimientos almacenados temporarios
. Procedimientos almacenados extendidos
. Procedimientos almacenados remotos

Tema 2: Crear, ejecutar, modificar y borrar procedimientos almacenados


Cmo se almacena un procedimiento
Mtodos para crear procedimientos almacenados
. El comando CREATE PROCEDURE
Proveer a un procedimiento almacenado de un contexto
Crear procedimientos almacenado temporarios
Agrupar, levantar y encriptar procedimientos almacenados
Enterprise Manager

http://www.sqlmax.com/centro/programa.asp (3 de 4)20/11/2007 04:04:20 a.m.


Programa Completo

El asistente para crear de procedimientos almacenados


Crear y agregar procedimientos almacenados Extendidos
Diferir la resolucin de nombres
Ejecutar un procedimiento almacenado
. Llamar un procedimiento almacenado para ejecutarlo
. Especificar parmeros y sus valores
. Ejecutar prcedimientos almacenados cuando SQL Server arranca
Modificar procedimientos almacenados
Borrar procedimientos almacenados

Tema 3: Programar procedimientos almacenados


Parmetros y variables
El comando RETURN y el manejo de errores
Valores por defecto y parmetros NULL
Comprobar errores del Server
Procedimientos asidados
Cursores
Mtodos para recuperar datos

Mdulo V: Conectarse a un SQL Server


Tema 1: Comenzando con ADO - ActiveX Data Objects

Tema 2: Modelo de objetos de ADO

Tema 3: Objetos ADO

Tema 4: Propiedades ADO

http://www.sqlmax.com/centro/programa.asp (4 de 4)20/11/2007 04:04:20 a.m.


SQL SERVER Manual en Linea - Modulo 1/1

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO I

Tema 1: Teora de Sistema de Base de Datos Relacional

Lo que aprender:

Al terminar este tema usted podr:


Entender los principales conceptos de la teora de base de datos relacionales

Que es un sistema de base de datos?

Un sistema de Base de Datos es bsicamente un sistema para archivar en computador; o sea, es un sistema
computarizado cuyo propsito general es mantener informacin y hacer que est disponible cuando se solicite.
La informacin en cuestin puede ser cualquier cosa que se considere importante para el individuo o la organizacin a la
cual debe servir el sistema; dicho de otro modo, cualquier cosa necesaria para apoyar el proceso general de atender los
asuntos de esa organizacin.
Pero es fundamental para el xito de su proyecto limitar el sistema de base de datos, que Ud. quiere disear, a un
especfico y bien definido conjunto de objetos e interacciones; lo que le permitir definir el alcance del sistema. Como
veremos mas adelante no se trata de modelizar "todo" el mundo sino solo la parte "importante" y "pertinente" para
alcanzar los objetivos funcionales del sistema. Esa parte del mundo que nos interesa la llamaremos el espacio del
problema.
El trmino modelo de datos se utilizar se utilizar para significar una descripcin conceptual del espacio del problema,
esto incluye la definicin de sus entidades, que son clases de objetos que comparten determinadas caractersticas (por
ejemplo un "cliente" es una entidad), dichas caractersticas se las denomina atributos (por ejemplo el "nombre" del
cliente es un atributo de un cliente).
El modelo de datos incluye la descripcin de las interrelaciones entre las entidades y las restricciones sobre dichas
relaciones (por ej: las "facturas de venta" se emiten a nombre de un "cliente" y esta relacin no puede faltar, es decir ,
no puede haber una factura que no tenga asignada un cliente.
La capa fsica o esquema fsico del diseo, est constituida por las tablas y vistas que sern implementadas, y constituye
la traslacin del modelo conceptual en una representacin fsica que pueda ser implementada utilizando el Sistema de
Gestin de Bases de Datos Relacional (SGBDR) a ser empleado, a los fines del presente Kit, el MS-SQL Server 2000.
Este esquema no es mas que la representacin del modelo conceptual o lgico expresado en trminos que puedan ser
usados para describirlo al SGBDR.
A medida que Ud. le vaya explicando al SGBDR como quiere que almacene los datos, el SGBDR crear los objetos
necesarios para gestionarlos (tablas, vistas, ndices, relaciones, etc). Lo que dar origen a la estructura la base de datos.
Por ltimo, llamaremos base de datos a la combinacin de los datos y su estructura. La base de datos incluye, entonces,
a los datos mas las tablas, vistas, procedimientos almacenados, consultas, y a las reglas que el motor de base datos
utilizar para asegurar el resguardo de los datos.
El trmino base de datos no incluye a la aplicacin la cual consiste de los formularios y los reportes con los que
interactuarn los usuarios, ni incluye la piezas de cdigo usadas para unir las partes de la aplicacin.
En un modelo de tres capas, la aplicacin que accede a los datos almacenados en una base de datos y que a la vez
interacta con el usuario se divide en dos partes: la llamada capa intermedia que contiene todas las validaciones y las
reglas del negocio y es la que interacta con la base de datos y el front end que es la que contiene los formularios y
realiza la presentacin de los reportes, interactuando con el usuario final (ver figura 1.1).

http://www.sqlmax.com/centro/moduloI_1.asp?MX= (1 de 3)20/11/2007 04:04:33 a.m.


SQL SERVER Manual en Linea - Modulo 1/1

El modelo Relacional

El modelo relacional est basado en una coleccin de principios matemticos desarrollado inicialmente sobre un conjunto
de conceptos tericos y predicados lgicos. Esto principios fueron aplicados al campo de los modelos de datos a finales
de los aos 60 por el Dr. E. F. Codd, investigador de IBM, y publicados por primera vez en 1970.
El modelo relacional define el modo en que los datos van a ser representados (estructura de datos), la forma en que van
ser protegidos (integridad de los datos) y las operaciones que pueden ser aplicadas sobre ellos (manipulacin de datos).
El MS-SQLServer 2000 implementa un modelo relacional de base de datos.
En trminos generales un sistema de base de datos relacional tiene las siguientes caractersticas:
Todos los datos estn conceptualmente representados como un arreglo ordenado de datos en filas y columnas, llamado
relacin.
Todos los valores son escalares, esto es, que dada cualquier posicin fila/columa dentro de la relacin hay uno y solo
un valor.
Todas las relaciones son realizadas sobre la relacin completa y dan como resultado otra relacin, concepto conocido

http://www.sqlmax.com/centro/moduloI_1.asp?MX= (2 de 3)20/11/2007 04:04:33 a.m.


SQL SERVER Manual en Linea - Modulo 1/1

como clausura .
A los fines prcticos una relacin puede ser considerada como una tabla, an cuando al momento de formularse la teora
intencionalmente se excluy el trmino tabla por tener connotaciones de ordenamiento que no se deben aplicar al
concepto de relacin que es mas un conjunto, que una tabla ordenada. De todos modos y a los fines del presente Kit
utilizaremos en forma indistinta la denominacin de relacin o de tabla.
Es importante destacar que el concepto de clausura permite que el resultado de una operacin sobre un relacin sea el
dato para otra operacin. Por lo que como veremos mas adelante al resultado de una orden select se le puede aplicar
otro select.

Terminologa relacional

La Figura 1.2 muestra una relacin con los nombres formales de sus componentes principales

La estructura de la figura constituye una relacin, donde cada fila constituye una tupla. La cantidad de tuplas en una
relacin indica la cardinalidad de la relacin. Cada columna en la relacin es un atributo, y la cantidad de atributos indica
el grado de la relacin.
La relacin se divide en dos secciones el encabezado y el cuerpo, donde el encabezado contiene la etiquetas de los
atributos. Estas etiquetas constan de dos parte separadas por dos puntos ":" la parte izquierda es la denominacin
propiamente dicha del atributo, mientras que la parte derecha configura el dominio del atributo, que es el conjunto de
todos los valores posibles y legales que puede tomar el atributo en las tuplas (por ej: el primer atributo de la relacin de
la figura tiene como dominio a todas las compaas que existen, mientras que solo algunas son valores efectivamente
incorporados a la relacin).
El cuerpo consiste en un conjunto desordenado de cero o ms tuplas, esto indica que las tuplas no tienen un orden
intrnseco, el nmero de registro no es tenido en cuenta en el modelo relacional. Por otro lado las relaciones sin tuplas
siguen siendo relaciones. Por ltimo las relaciones son conjuntos donde cualquier elemento puede ser inequvocamente
identificado, por lo que la relacin no permite tuplas duplicadas.
En cuanto a la terminologa, en esta parte se utiliz una lenguaje formal para la definicin de los elementos abordados, a
partir de ahora se utilizarn las siguientes equivalencias de significado:
Una relacin puede ser una tabla, o un recordset o un result set.
Una tupla puede ser una fila (row) o un registro (record)
Un atributo puede ser una columna (column) o un campo (field).
Dichas equivalencias se generan porque al instanciar en la implementacin fsica el modelo conceptual, se utilizan
trminos que corresponden precisamente al modelo fsico de implementacin en el SGBDR, en este caso el MS-
SQLServer 2000, que utiliza la terminologa Microsoft.

< Programa Tema 2 >

http://www.sqlmax.com/centro/moduloI_1.asp?MX= (3 de 3)20/11/2007 04:04:33 a.m.


SQL SERVER Manual en Linea - Modulo 1/2

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO I

Tema 2: Introduccin al diseo de bases de datos

Lo que aprender:

Al terminar este tema usted podr:


Describir los componentes principales de una base de datos relacional.
Describir el proceso de normalizacin y normalizar tablas en un diseo de bases de datos.
Identificar las relaciones que existen entre las entidades.

Antes de que usted pueda desarrollar un modelo lgico de datos, y subsecuentemente crear una base de datos y los
objetos que esta contiene, usted debe comprender los conceptos fundamentales del diseo de bases de datos. Adems,
deber estar familiarizado con los componentes bsicos de una base de datos y cmo esos componentes trabajan juntos
para proporcionar un almacenamiento eficaz de los datos y acceso a aquellos que requieren tipos especficos de datos,
en formatos especficos, desde la base de datos.

Este tema presenta los componentes bsicos de una base de datos y la terminologa que describe esos componentes. Se
discute la normalizacin y el concepto de relaciones entre entidades, dos conceptos que deben integrarse para entender
el diseo de bases de datos relacionales.

Componentes de una base de datos SQL Server

Una base de datos SQL Server consiste en una coleccin de tablas que guardan conjuntos especficos de datos
estructurados. Una tabla (entidad) contiene una coleccin de filas (tuplas) y columnas (atributos). Cada columna en la
tabla se disea para guardar un cierto tipo de informacin (por ejemplo, fechas, nombres, montos, o nmeros). Las
tablas tienen varios tipos de controles (restricciones, reglas, desencadenadores, valores por defecto, y tipos de datos de
usuario) que aseguran la validez de los datos. Las tablas pueden tener ndices (similar a los de los libros) que permiten
encontrar las filas rpidamente. Usted puede agregar restricciones de integridad referencial a las tablas para asegurar la
consistencia entre los datos interrelacionados en tablas diferentes. Una base de datos tambin puede utilizar
procedimientos almacenados que usan Transact-SQL programando cdigo para realizar operaciones con los datos en la
base de datos, como guardar vistas que proporcionan acceso personalizado a los datos de la tabla.

Por ejemplo, suponga que se crea una base de datos llamada MiCoBD para manejar los datos en su compaa. En la
base de datos MiCoBD, crea una tabla llamada Empleados para guardar informacin sobre cada empleado, y la tabla
contiene las columnas EmpID, Apellido, Nombre, Dept, y Cargo. Para asegurar que nunca dos empleados tengan el
mismo EmpID y que la columna de Dept contiene nmeros slo vlidos para las secciones en su compaa, usted debe
agregar restricciones a la tabla. Si usted quisiera realizar bsquedas rpidas para encontrar los datos de un empleado
basado en el ID del empleado, usted definira ndices. Por cada empleado, se agrega una fila de datos a la tabla
Empleados, para esto usted crea que un procedimiento almacenado llamado AgregarEmp que se personaliza para
aceptar los valores de los datos por un nuevo empleado y que realiza la operacin de agregar la fila a la tabla
Empleados. Se podra necesitar un resumen departamental de empleados, por lo que usted define una vista llamada
EmpsDept que combina datos de las tablas Secciones y Empleados. Figura 2.1 muestra las partes de la base de datos
MiCoBD.

http://www.sqlmax.com/centro/moduloI_2.asp?MX= (1 de 6)20/11/2007 04:04:45 a.m.


SQL SERVER Manual en Linea - Modulo 1/2

Figura 2.1 La base de datos MiCoBD, la tabla Empleados, y la vista EmpsDept

Normalizar un diseo de base de datos

A continuacin se ver el tema de normalizacin desde un punto vista prctico, resaltando aquellos conceptos tiles y
comentando las limitaciones que deben tenerse en cuenta en el proceso de normalizado de una base de datos.

Perfeccionar un diseo de base de datos incluye el proceso de normalizacin. Normalizar un diseo lgico de base de
datos involucra usar mtodos formales para separar los datos en mltiples tablas relacionadas. Tener un nmero mayor
de tablas con pocas columnas es caracterstico de una base de datos normalizada; mientras que tener pocas tablas con
ms columnas cada una es caracterstico de una base de datos no-normalizada.

Una normalizacin razonable mejora a menudo el comportamiento general del sistema. Cuando se utilizan los ndices, el
SQL Server 2000 Query Optimizer (Optimizador de Consultas de SQL Server) es muy eficiente al seleccionar
interrelaciones entre las tablas.
Un aumento de la normalizacin produce una mayor cantidad y complejidad de combinaciones entre las tablas
requeridas para recuperar los datos. Demasiadas combinaciones complejas entre varias tablas puede deteriorar el
rendimiento en las consultas. Una normalizacin razonable debera incluir la mnima cantidad de consultas habituales
posible que involucren ms de cuatro tablas relacionadas.

Una base de datos que se usa principalmente para soporte de decisin (al revs de una base de datos operacional que
realiza tareas de actualizacin de datos) podra no tener actualizaciones redundantes y podra ser ms entendible y
eficaz para las consultas si el diseo no se normaliza totalmente. No obstante, tener datos no-normalizados es el error
de diseo ms comn en aplicaciones de base de datos ms que tener datos demasiado normalizados. Empezar con un
diseo completamente normalizado y a partir de all desnormalizar selectivamente algunas tablas por razones especficas
de rendimiento de las consultas es una buena estrategia.

A veces el diseo de la base de datos lgico ya est definido, tal el caso de una base de datos existente, y el rediseo
total no es factible. Pero an entonces, podra ser posible normalizar una tabla grande selectivamente en varias tablas
ms pequeas. Si la base de datos es accedida a travs de los procedimientos almacenados, este cambio del esquema
podra tener lugar sin afectar las aplicaciones. Si no, podra ser posible crear una vista que esconde de las aplicaciones el
cambio del esquema.

http://www.sqlmax.com/centro/moduloI_2.asp?MX= (2 de 6)20/11/2007 04:04:45 a.m.


SQL SERVER Manual en Linea - Modulo 1/2

Lograr una base de datos bien diseada

En la teora de diseo de base de datos relacionales, las reglas de normalizacin identifican ciertos atributos que deben
estar presentes o ausentes en una base de datos bien diseada. Estas reglas pueden ponerse bastante complicadas y
pueden ir ms all del alcance del presente. De todos modos, hay algunas reglas que pueden ayudarlo a lograr un
diseo de la base de datos correcto. Una tabla debe tener un identificador, debe guardar datos para slo un solo tipo de
entidad, debera evitar columnas que acepten valores nulos, y no debe tener valores o columnas repetidas.

Una Tabla debe Tener un Identificador

La regla fundamental de la teora del diseo de base de datos es que cada tabla debe tener un identificador de las filas,
que es una columna o un conjunto de columnas que toman valores nicos para cada registro de la tabla. Cada tabla
debe tener una columna de ID, y ningn registro puede compartir el mismo valor de ID con otro. La columna (o
columnas) que sirve como identificador nico de la fila para una tabla constituye la clave primaria de la tabla.

En la Figura 2.2, la tabla Empleados no incluye una columna que identifica unvocamente cada fila dentro de la tabla.
Fjese que el nombre de David Mendlen aparece dos veces. Al no haber ningn identificador nico en esta tabla, no hay
ninguna manera de distinguir fcilmente una fila de otra. Esta situacin podra ser un problema, ms an, si ambos
empleados trabajaron en la misma seccin y tienen el mismo tipo de trabajo.

Figura 2.2 Una tabla que no tiene ningn identificador nico.


Usted puede normalizar la tabla agregando una columna que singularmente identifique cada fila, como se muestra en la
Figura 2.3. Fjese que cada instancia de David Mendlen tiene un nico valor de EmpID.

Figura 2.3 Una tabla normalizada con un identificador nico.


Una Tabla debe Guardar Datos para un Solo Tipo de Entidad
Intentar guardar demasiada informacin en una tabla puede afectar la administracin eficaz y fiable de los datos en la
tabla. Por ejemplo, en la Figura 2.4, la tabla Libros incluye informacin sobre cada editor de libros.

Figura 2.4 Una tabla de libros que incluye ttulo e informacin del editor.

Aunque es posible tener columnas que contienen informacin para el libro y su editor en la misma tabla, este diseo
lleva a varios problemas. La informacin del editor debe agregarse y debe guardarse redundantemente para cada libro

http://www.sqlmax.com/centro/moduloI_2.asp?MX= (3 de 6)20/11/2007 04:04:45 a.m.


SQL SERVER Manual en Linea - Modulo 1/2

publicado por un editor dado. Esta informacin usa espacio extra de almacenamiento en la base de datos. Si la direccin
del editor cambia, el cambio debe realizarse en todos los registros de libros de ese editor. Adems, si el ltimo libro de
un editor es eliminado de la tabla Libros, la informacin de ese editor se pierde.

En una base de datos normalizada, se guardara la informacin sobre los libros y editores en por lo menos dos tablas:
una para los libros y una para los editores (como se muestra en Figura 2.5).

Figure 2.5 Un diseo de la base de datos normalizado incluye una tabla para los libros y una tabla para informacin
sobre el editor.

La informacin sobre el editor tiene que ser grabada slo una vez y quedar vinculada a cada libro de ese editor. Si la
informacin del editor cambia, debe cambiarse en slo un lugar, y la informacin del editor estar all an cuando el
editor no tenga ningn libro en la base de datos.

Una Tabla debe Evitar Columnas que acepten valores nulos

Las tablas pueden tener columnas definidas para permitir valores nulos. Un valor nulo indica que el registro no tiene
valor por ese atributo. Aunque puede ser til permitir valores nulos en casos aislados, es mejor usarlos muy poco porque
ellos requieren un manejo especial con el consiguiente aumento de la complejidad de las operaciones de datos. Si tiene
una tabla que tiene varias columnas que permiten valores nulos y varias de las filas tienen valores nulos en dichas
columnas, debera considerar poner estas columnas en otra tabla vinculada a la tabla primaria. Guardar los datos en dos
tablas separadas permite que la tabla primaria sea simple en su diseo pero a la vez mantener la capacidad de
almacenar informacin ocasional.

Una Tabla no Debe tener Valores o Columnas Repetidas

Una tabla no debe contener una lista de valores para un pedazo especfico de informacin. Por ejemplo, suponga que
usted quiere consultar los ttulos de libros y sus autores. Aunque la mayora de los libros podran tener slo un autor,
muchos de ellos podran tener dos o ms. Si hay slo una columna en la tabla Libros para el nombre del autor, esta
situacin presenta un problema. Una solucin es guardar el nombre de ambos autores en una columna, pero mostrar
una lista de autores individuales sera entonces difcil. Otra solucin es cambiar la estructura de la tabla para agregar
otra columna para el nombre del segundo autor, pero esta solucin guarda slo dos autores. Debera agregarse otra
columna si algn libro tiene tres autores.

http://www.sqlmax.com/centro/moduloI_2.asp?MX= (4 de 6)20/11/2007 04:04:45 a.m.


SQL SERVER Manual en Linea - Modulo 1/2

Figure 2.6 Dos modos de estructurar la tabla Libros

Si usted encuentra que necesita guardar una lista de valores en una sola columna o si tiene columnas mltiples para una
sola pieza de datos (Autor1, Autor2, y as sucesivamente), debe considerar poner los datos duplicados en otra tabla con
un vnculo a la tabla primaria. En el caso de la tabla Libros, usted podra crear una tabla primaria adicional para los
autores y luego crear una tercera tabla que vincule los libros a sus autores y almacene los valores repetidos, como se
muestra en la Figura 2.7. Este diseo habilita cualquier nmero de autores para un libro sin modificar la definicin de la
tabla y no desperdicia espacio libre para almacenar libros que tienen un solo autor.

Figura 2.7 Tres tablas que guardan informacin sobre los libros y sus autores.

Relaciones entre entidades

En una base de datos relacional, las relaciones entre entidades ayudan a prevenir datos redundantes. Una relacin entre
entidades trabaja vinculando datos de dos tablas a travs de columnas clave, que generalmente tienen el mismo nombre
en ambas tablas. En la mayora de los casos, la relacin entre entidades vincula la clave primaria de una tabla que
proporciona a un identificador nico para cada fila con una entrada en la clave fornea de la otra tabla. Se discuten
claves primarias y las claves forneas en ms detalle en Tema 5, "Llevando a cabo Integridad de los Datos."

Hay tres tipos de relaciones entre las tablas: uno-a-uno, uno-a-muchos, y muchos-a-muchos. El tipo de relacin
depende de cmo se definen las columnas relacionadas.

Relaciones entre tablas uno-a-uno

En una relacin uno-a-uno, una fila en tabla A no tiene ms de una fila vinculada en tabla B (y viceversa). Una
referencia uno-a-uno se crea si las dos columnas relacionadas son claves primarias o tienen restriccin de unicidad. Este
tipo de referencia no es comn, sin embargo, porque la informacin relacionada de esta manera normalmente estara en
una sola tabla.

Relaciones entre tablas uno-a-muchos

Una relacin uno-a-muchos es el tipo ms comn de relacin entre entidades. En este tipo de relacin, una fila en la
tabla A tiene muchas filas vinculadas en la tabla B, pero una fila en la tabla B tiene una nica fila vinculada en la tabla A.
Por ejemplo, las tablas Editores y Ttulo mencionadas previamente tienen una relacin uno-a-muchos. Cada editor
produce muchos ttulos, pero cada ttulo tiene un solo editor. Una relacin uno-a-muchos se crea si solo una de las
columnas relacionadas es una clave primaria o tiene una restriccin de unicidad.

Relacin entre tablas muchos-a-muchos

http://www.sqlmax.com/centro/moduloI_2.asp?MX= (5 de 6)20/11/2007 04:04:45 a.m.


SQL SERVER Manual en Linea - Modulo 1/2

En una relacin muchos-a-muchos, una fila en tabla A tiene muchas filas vinculadas en tabla B (y viceversa). Se puede
crear tal relacin definiendo una tercera tabla, llamada tabla de unin cuya clave primaria consiste en las claves
forneas de ambas tablas A y B. En las Figuras 2.6 y 2.7, usted vio cmo la informacin del autor puede separarse en
otra tabla. La tabla Libros y la tabla Autores tienen una relacin muchos-a-muchos. Cada una de estas tablas tiene una
relacin uno-a-muchos con la tabla de LibrosAutores que sirve como la tabla de la unin entre las dos tablas primarias.

Ejercicio 1: Explorando los Conceptos Bsicos de Diseo de la base de datos

En este ejercicio, usted ver los objetos primarios que estn contenidos en una base datos SQL Server. Usted aplicar
los principios de normalizacin a un diseo de la base de datos e identificar las relaciones que existen entre las
entidades dentro de una base de datos.

Resumen del tema

Una base de datos SQL Server consiste en una coleccin de tablas que guardan un conjunto especfico de datos
estructurados. Una tabla contiene una coleccin de filas y columnas. Cada columna en la tabla se disea para guardar un
cierto tipo de informacin (por ejemplo, fechas, nombres, montos, o nmeros). El diseo lgico de la base de datos,
incluyendo las tablas y las relaciones entre ellas, es el corazn de una base de datos relacional optimizada. Perfeccionar
un diseo de base de datos incluye el proceso de normalizacin. Normalizar un diseo lgico de base de datos lgico
involucra usar mtodos formales para separar los datos en mltiples tablas relacionadas. A medida que la normalizacin
aumenta, incrementa el nmero y la complejidad de los vnculos que son necesarios para recuperar los datos. Las reglas
de normalizacin identifican ciertos atributos que deben estar presentes o ausentes en una base de datos bien diseada.
Las tablas en una base de datos normalizada deben tener un identificador, deben guardar slo datos para un solo tipo de
entidad, deben evitar columnas que acepten valores nulos, y no deben tener valores o columnas repetidos. Usted puede
crear relaciones entre sus tablas en un diagrama de la base de datos y mostrar cmo se vinculan las columnas en una
tabla a las columnas de otra tabla. En una base de datos relacional, las relaciones ayudan a prevenir datos redundantes.
Una relacin trabaja vinculando datos de las columnas, generalmente columnas clave que tienen el mismo nombre en
ambas tablas. Hay tres tipos de relaciones entre las tablas: uno-a-uno, uno-a-muchos, y muchos-a-muchos. El tipo de
relacin entre tablas depende de cmo usted define las columnas relacionadas.

< Programa Tema 3 >

http://www.sqlmax.com/centro/moduloI_2.asp?MX= (6 de 6)20/11/2007 04:04:45 a.m.


SQL SERVER Manual en Linea - Modulo 1/3

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO I

Tema 3: Elementos adicionales para el diseo una base de datos SQL Server

Lo que aprender:

Al terminar este tema usted podr:


Describir los factores que se deben tener en cuenta al disear una base de datos SQL Server.

Al disear una base de datos SQL Server, se deben tener en cuenta varios factores, que incluyen los archivos de la base
de datos y grupos de archivos, registros de transacciones, la instalacin del SQL Server y su ambiente operativo, y la
seguridad. Esta leccin discute cada uno de estos temas.

Archivos y Grupos de archivos


Para definir una base de datos, SQL Server 2000 usa un conjunto de archivos del sistema operativo. Todos los datos y
objetos de la base de datos, como tablas, procedimientos almacenados, desencadenadores, y vistas, se guardan dentro
de los siguientes tipos de archivos del sistema operativo:
Archivo Primario. Este archivo contiene la informacin de arranque para la base de datos y es usado para almacenar
datos. Cada base de datos tiene un archivo de los datos primario.
Archivo Secundario. Estos archivos mantienen todos los datos que no caben en el archivo de los datos primario. Si el
archivo primario puede almacenar todos los datos da la base de datos, las bases de datos no necesitan tener archivos de
los datos secundarios. Algunas bases de datos podran ser lo suficientemente grandes para necesitar archivos de datos
secundarios mltiples o usar archivos secundarios en unidades de disco separadas para distribuir datos en mltiples
discos o para mejorar el rendimiento de la base de datos.
Registros de transacciones. Estos archivos mantienen la informacin del registro que se usa para recuperar la base de
datos. Debe haber por lo menos un archivo de registro para cada base de datos.

Una base de datos simple puede crearse con un archivo primario que contiene todos los datos y objetos y un archivo de
registro que contiene la informacin del registro de transacciones.

Alternativamente, una base de datos ms compleja puede crearse con un archivo primario y cinco archivos secundarios.
Los datos y objetos de la base de datos son distribuidos por los seis archivos, y cuatro archivos de registro adicionales
contienen la informacin del registro de transacciones.

Los grupos de archivos agrupan archivos para propsitos administrativos y de ubicacin de datos. Por ejemplo, tres
archivos (Data1.ndf, Data2.ndf, y Data3.ndf) pueden crearse en tres unidades de disco y pueden asignarse al grupo de
archivos fgroup1. Una tabla puede crearse entonces especficamente en el grupo de archivos fgroup1. Las consultas
sobre los datos de la tabla se extendern por los tres discos y se mejorar el rendimiento. La misma mejora de
rendimiento puede lograrse con un solo archivo creado sobre un arreglo redundante de discos independientes (RAID).

Los archivos y grupos de archivos, sin embargo, ayudan a agregar nuevos archivos fcilmente a los nuevos discos.
Adicionalmente, si su base de datos excede el tamao del mximo para un solo archivo Windows NT, usted puede usar
un archivo de datos secundario para permitir el crecimiento de su base de datos.

Reglas para disear Archivos y Grupos de archivos

Cuando usted disea archivos y grupos de archivos, debe adherir a las reglas siguientes:
Un archivo o grupo de archivos no puede ser usado por ms de una base de datos. Por ejemplo, los archivos que
ventas.mdf y ventas.ndf que contienen datos y objetos de la base de datos de ventas no pueden ser usados por
cualquier otra base de datos.
Un archivo puede ser un miembro de slo un grupo de archivos.
Los datos y la informacin de registro de transaccin no pueden ser parte del mismo archivo o grupo de archivos.
Los archivos de registro de transacciones nunca son parte de un grupo de archivos.

Grupos de archivos predefinidos

Una base de datos comprende un grupo de archivos primario y varios grupos de archivo definidos por el usuario. El
grupo de archivos que contiene el archivo primario es el grupo de archivos primario. Cuando una base de datos se crea,

http://www.sqlmax.com/centro/moduloI_3.asp?MX= (1 de 5)20/11/2007 04:04:48 a.m.


SQL SERVER Manual en Linea - Modulo 1/3

el grupo de archivos primario contiene el archivo de datos primario y cualquier otro archivo que no se pone en otro
grupo de archivos. Todas las tablas del sistema se asignan en el grupo de archivos primario. Si el grupo de archivos
primario se queda sin espacio, ninguna informacin nueva del catlogo puede agregarse a las tablas del sistema. El
grupo de archivos primario slo se llenar si la bandera de configuracin "autogrow" est apagada o si todos los discos
que estn sosteniendo los archivos en el grupo de archivos primario se quedaron sin espacio. Si sucede esto, se deber
encender la bandera de configuracin "autogrow" o mover archivos a un nuevo almacenamiento para liberar mas
espacio.

Los grupos de archivos definidos por el usuario son cualquier grupo de archivos que son especficamente creados por el
usuario cuando l o ella estn inicialmente creando o posteriormente alterando la base de datos. Si un grupo de archivos
definido por el usuario se llena, se afectarn slo las tablas de los usuarios especficamente asignadas a ese grupo de
archivos.

En cualquier momento, un grupo de archivos puede ser designado como el grupo de archivos predefinido. Cuando se
crean objetos en la base de datos sin especificar a que grupo de archivos pertenecen, se asignan al grupo de archivos
predefinido. Los grupos de archivos predefinidos deben ser suficiente grandes para almacenar cualquier objeto no
asignado a un grupo de archivos definido por el usuario. Inicialmente, el grupo de archivos primario es el grupo de
archivos predefinido.
Los grupos de archivos predefinidos pueden ser cambiados usando la sentencia ALTER DATABASE. Cuando usted cambia
el grupo de archivos predefinido, cualquier objeto que no tiene un grupo de archivos especificado se asigna a los
archivos de los datos en el nuevo grupo de archivos predefinido cuando se crea. La asignacin para los objetos y tablas
del sistema, sin embargo, se mantiene en el grupo de archivos primario y no en el nuevo grupo de archivos predefinido.
Cambiar el grupo de archivos predefinido previene que objetos del usuario que no se crean especficamente en un grupo
de archivos definidos por el deban competir con los objetos y tablas del sistema para el espacio de los datos.

Recomendaciones

Al implementar una base de datos, usted debe intentar adherir a las pautas siguientes para usar archivos y grupos de
archivos:
La mayora de las bases de datos trabajar bien con un solo archivo del datos y un solo archivo de registro de
transacciones.
Si usted usa archivos mltiples, cree un segundo grupo de archivos para los archivos adicionales y configrelo como el
grupo de archivos predefinido. De esta manera, el archivo primario contendr slo tablas y objetos del sistema.
Para maximizar rendimiento, usted puede crear archivos o grupos de archivos en tantos discos fsicos locales
disponibles como sea posible, y ubicar grandes objetos que compiten por espacio en grupos de archivos diferentes.
Use grupos de archivos para habilitar la colocacin de objetos en discos fsicos especficos.
Ubique las diferentes tablas que se usan para una misma consulta en grupos de archivos diferente. Este procedimiento
mejorar el rendimiento al tomar ventaja del procesamiento paralelo de input/output del disco (I/O) al buscar datos
vinculados.
Ponga las tablas fuertemente accedidas y los ndices no-agrupados que pertenecen a esas tablas en grupos de archivos
diferentes. Este procedimiento mejorar el rendimiento debido al I/O paralelo si los archivos se localizan en discos fsicos
diferentes.
No ponga el archivo de registro de transacciones en el mismo disco fsico con los otros archivos y grupos de archivos.

Registros de transacciones

Una base de datos en SQL Server 2000 tiene por lo menos un archivo de datos y un archivo de registro de
transacciones. Los datos y la informacin del registro de transacciones nunca es mezclada en el mismo archivo, y
archivos individuales son slo por una nica base de datos.

El SQL Server usa el registro de transacciones de cada base de datos para recuperar transacciones. El registro de
transacciones es un registro serial de todas las modificaciones que han ocurrido en la base de datos as como de las
transacciones que realizaron dichas modificaciones. El archivo de registro de transacciones graba el comienzo de cada
transaccin y archiva los cambios producidos en los datos. Este registro tiene bastante informacin para deshacer las
modificaciones (si es necesario) que hizo durante cada transaccin. Para algunas operaciones pesadas, como CREATE
INDEX, el registro de transacciones registra, en cambio, los hechos a los que la operacin dio lugar. El registro crece
continuamente tanto como operaciones ocurran en la base de datos.
El registro de transacciones graba la asignacin y liberacin de las pginas y la grabacin definitiva (commit) o la vuelta
atrs (rollback) de cada transaccin. Este capacidad permite al SQL Server rehacer (Rollup) o deshacer (Rollback) cada
transaccin de las siguientes maneras:
Una transaccin es rehecha cuando se aplica un registro de transacciones. El SQL Server copia la imagen posterior a
cada modificacin de la base de datos o vuelve a ejecutar sentencias como CREATE INDEX. Estas acciones se aplican en
el mismo orden en la que ellas ocurrieron originalmente. Al final de este proceso, la base de datos est en el mismo
estado que estaba en el momento en que el registro de transacciones fue copiado.
Una transaccin se deshace cuando una transaccin queda incompleta por alguna causa. El SQL Server copia la imagen
previa de todas las modificaciones a la base de datos desde el BEGIN TRANSACTION. Si encuentra archivos de registro
de transacciones que indican que un CREATE INDEX fue ejecutado, realiza operaciones que lgicamente invierten la

http://www.sqlmax.com/centro/moduloI_3.asp?MX= (2 de 5)20/11/2007 04:04:48 a.m.


SQL SERVER Manual en Linea - Modulo 1/3

sentencia. stos imgenes previas Ye inversiones del comando CREATE INDEX son aplicados en orden inverso a la
secuencia original.

A un punto de salvaguarda, el SQL Server asegura que se han grabado en el disco todos los archivos de registro de
transacciones y las pginas de la base de datos que se modificaron. Durante cada proceso de recuperacin de base de
datos, que ocurre cuando el SQL Server se reinicia, una transaccin necesita ser rehecha slo si no se conoce si todas
las modificaciones de datos de la transaccin fueron realmente transferidas desde el cach de SQL Server al disco.
Debido a que en un punto de salvaguarda se obliga a que todas las pginas modificadas sean efectivamente grabadas en
el disco, este representa el punto que se toma como punto de inicio para el comienzo de las operaciones de
recuperacin. Dado que para todas las pginas modificadas antes del punto de salvaguarda se garantiza que estn en el
disco, no hay ninguna necesidad de rehacer algo que se hizo antes del punto de salvaguarda.

Las copias de respaldo del registro de transacciones le permiten a usted que recupere la base de datos al momento de
un punto especfico (por ejemplo, previo a entrar en datos no deseados) o a un punto de falla. Las copias de respaldo
del registro de transacciones deben ser tenidas muy en cuenta dentro de su estrategia de recuperacin de bases de
datos.

Ambiente

Generalmente, cuanto ms grande es la base de datos, mayores son los requisitos de hardware. El diseo de la base de
datos siempre debe tomar en cuenta la velocidad del procesador, el tamao de la memoria, y el espacio del disco duro y
su configuracin. Hay otros factores determinantes, sin embargo: el nmero de usuarios o sesiones coexistentes, el
registro de transacciones, y los tipos de operaciones a realizar sobre la base de datos. Por ejemplo, una base de datos
que contiene datos de la biblioteca escolar con escasos niveles de actualizacin generalmente tendr requisitos de
hardware ms bajos que un almacn de datos de un-terabyte que contiene ventas, productos, e informaciones de los
clientes frecuentemente analizados, para una gran corporacin. Aparte de los requisitos de almacenamiento de disco, se
necesitar ms memoria y procesadores ms rpidos para levantar en memoria grandes volmenes de datos del
almacn de datos y procesar mas rpidamente las consultas.

Estimar el Tamao de una base de datos

Al disear una base de datos, usted podra necesitar estimar cun grande ser la base de datos cuando este llena de
informacin. Estimar el tamao de la base de datos puede ayudarle a determinar la configuracin del hardware que
usted necesitar para alcanzar los siguientes requisitos:
Lograr el rendimiento requerido por sus aplicaciones
Asegurar la cantidad fsica apropiada de espacio en disco para guardar los datos y ndices

Estimar el tamao de una base de datos tambin puede llevarlo a determinar si el diseo de la base de datos necesita
mayor refinamiento. Por ejemplo, usted podra determinar que el tamao estimado de la base de datos es demasiado
grande para ser implementada en su organizacin y que requiere mayor normalizacin. Recprocamente, el tamao
estimado podra ser ms pequeo que el esperado, permitiendo denormalizar en cierto grado la base de datos para
mejorar el rendimiento de las consultas.

Para estimar el tamao de una base de datos, estime el tamao de cada tabla individualmente y sume dichos valores. El
tamao de una tabla depende si la tabla tiene o no ndices y, en este caso, qu tipo de ndices.

Diseo fsico de la base de datos

El subsistema de entrada/salida (motor de almacenamiento) es un componente importante de cualquier base de datos


relacional. Una aplicacin de base de datos exitosa normalmente requiere una planificacin cuidadosa en las fases
tempranas de su proyecto. El motor de almacenamiento de una base de datos relacional requiere de esta planificacin
que incluye a lo siguiente:
Qu tipo de hardware de disco ser utilizado
Cmo distribuye sus datos en los discos
Qu diseo de ndices se va a utilizar para mejorar el rendimiento de las consultas.
Cmo se van a configurar apropiadamente todos los parmetros de configuracin para que la base de datos funcione
correctamente.

Instalacin de SQL Server

Aunque la instalacin de SQL Server est ms all del alcance de este Kit de Entrenamiento, usted siempre debe tener
en cuenta lo siguiente antes de realizar una instalacin:
Est seguro que la computadora rene los requisitos de sistema para SQL Server 2000.
Haga copias de respaldo de su instalacin actual de Microsoft SQL Server si usted est instalando SQL Server 2000 en
la misma computadora.
Si usted est instalando un failover cluster, desactive el NetBIOS en todas las tarjetas de la red privada antes de

http://www.sqlmax.com/centro/moduloI_3.asp?MX= (3 de 5)20/11/2007 04:04:48 a.m.


SQL SERVER Manual en Linea - Modulo 1/3

ejecutar el instalador de SQL Server.


Repase todas las opciones de instalacin de SQL Server y este preparado para hacer las selecciones apropiadas cuando
ejecute el instalador.
Si usted est usando un sistema operativo que tiene configuraciones regionales diferentes a ingls (Estados Unidos), o
si usted est personalizando el juego de caracteres o la configuracin del ordenamiento de los caracteres, revise los
temas referidos a la configuracin de colecciones.
Antes de ejecutar el instalador de SQL Server 2000, cree uno o ms cuentas de usuario del dominio si usted est
instalando SQL Server 2000 en una computadora con Windows NT o Windows 2000 y quiere que SQL Server 2000 se
comunique con otros clientes y servidores.

Usted debe iniciar el sistema operativo bajo una cuenta de usuario que tiene permisos locales de administrador; por otra
parte, usted debe asignar los permisos apropiados a la cuenta de usuario de dominio. Est seguro de cerrar todos los
servicios dependientes sobre SQL Server (incluso cualquier servicio que usa ODBC, como el Internet Information Server,
o IIS). Adems, cierre al Windows NT Event Viewer y a los visualizadores de la registry (Regedit.exe o Regedt32.exe).

Seguridad

Una base de datos debe tener un sistema de seguridad slido para controlar las actividades que pueden realizarse y
determinar qu informacin puede verse y cul puede modificarse. Un sistema de seguridad slido asegura la proteccin
de datos, sin tener en cuenta cmo los usuarios obtienen el acceso a la base de datos.

Planificar la Seguridad

Un plan de seguridad identifica qu usuarios pueden ver qu datos y qu actividades pueden realizar en la base de
datos. Usted debe seguir siguientes los pasos para desarrollar un plan de seguridad:
Liste todas los items y actividades en la base de datos que debe controlarse a travs de la seguridad.
Identifique los individuos y grupos en la compaa.
Combine las dos listas para identificar qu usuarios pueden ver qu conjuntos de datos y qu actividades pueden
realizar sobre la base de datos.

Niveles de seguridad

Un usuario atraviesa dos fases de seguridad al trabajar en SQL Server: la autenticacin y autorizacin (aprobacin de
los permisos). La fase de la autenticacin identifica al usuario que est usando una cuenta de inicio de sesin y verifica
slo su capacidad para conectarse a un instancia de SQL Server. Si la autenticacin tiene xito, el usuario se conecta a
una instancia de SQL Server. El usuario necesita entonces permisos para acceder a las bases de datos en el servidor, lo
que se obtiene concediendo acceso a una cuenta en cada base de datos (asociadas al inicio de sesin del usuario). La
validacin de los permisos permite controlar las actividades que el usuario puede realizar en la base de datos SQL Server.

Modos de autenticacin

El SQL Server puede operar en uno de dos modos de seguridad (autenticacin): la Autenticacin de Windows y el modo
Mixto. El modo de Autenticacin de Windows le permite a un usuario que se conecte a travs de una cuenta de usuario
Windows NT 4.0 o Windows 2000. El modo mixto (Autenticacin de Windows y Autenticacin de SQL) le permite a los
usuarios que conecten a una instancia de SQL Server usando Autenticacin de Windows o Autenticacin de SQL Server.
Los usuarios que se conectan a travs de una cuenta del usuario Windows NT 4.0 o Windows 2000 pueden hacer uso de
conexiones de confianza en el modo de Autenticacin de Windows o en el modo mixto.

Resumen del tema

Al disear una base de datos SQL Server, se deben tener en cuenta varios factores, que incluyen los archivos de la base
de datos y grupos de archivos, registros de transacciones, la instalacin del SQL Server y su ambiente operativo, y la
seguridad. Todos los datos y objetos de la base de datos, como tablas, procedimientos almacenados, desencadenadores,
y vistas, se guardan dentro de los archivos primario, secundarios, dentro del registro de transacciones. Los grupos de
archivos agrupan archivos para propsitos administrativos y de ubicacin de los datos. El grupo de archivos que contiene
el archivo primario es el grupo de archivos primario. Una base de datos en SQL Server 2000 tiene al menos un archivo
de datos y un archivo de registro de transacciones. Datos y la informacin del registro de transacciones nunca se
mezclan en el mismo archivo, y los archivos individuales son utilizados por solo una base de datos. El SQL Server usa el
registro de transacciones de cada base de datos para recuperar transacciones. El diseo de la base de datos siempre
debe tomar en consideracin la velocidad de procesador, la memoria, y el espacio del disco duro y su configuracin. Hay
otros factores determinantes, sin embargo: el nmero de usuarios o sesiones coexistentes, el registro de transacciones,
y los tipos de operaciones a realizar sobre la base de datos Al disear una base de datos, usted podra necesitar estimar
cun grande ser la base de datos cuando este llena de informacin. Al instalar SQL Server, usted debe tener en cuenta
varios problemas. Una base de datos debe tener un sistema de seguridad slido para controlar las actividades que
pueden o no realizarse y determinar qu informacin puede verse y cul puede modificarse. Un diseo de seguridad
identifica qu usuarios pueden ver qu datos y qu actividades pueden realizar sobre la base de datos.

http://www.sqlmax.com/centro/moduloI_3.asp?MX= (4 de 5)20/11/2007 04:04:48 a.m.


SQL SERVER Manual en Linea - Modulo 1/3

< Programa Tema 4 >

http://www.sqlmax.com/centro/moduloI_3.asp?MX= (5 de 5)20/11/2007 04:04:48 a.m.


SQL SERVER Manual en Linea - Modulo 1/4

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO I

Tema 4: Identificar los requerimientos de diseo

Lo que aprender:

Al terminar este tema usted podr:

Identificar las metas y el alcance de un proyecto de base de datos.


Identificar los tipos de datos que manejar la base de datos, la cantidad actual de datos, el crecimiento esperado, y
cmo se usan actualmente.
Identificar cmo se usarn los datos en la nueva base de datos.
Identificar cualquier regla comercial que se utilizar en el sistema.

El Proceso de Identificar los Requerimientos de diseo

El proceso de identificar los requerimientos del sistema incluye una variedad de pasos. El nmero de pasos incluidos en
este proceso, cmo estos pasos se definen, y la forma en que ellos se definen puede variar grandemente de recurso a
recurso (sin que un mtodo sea necesariamente es el ms correcto). Segn el propsito de este kit de entrenamiento,
este proceso ha sido dividido en cuatro tareas primarias:
Identificar la metas del sistema
Identificar la cantidad y los tipos de datos
Identificar cmo se usarn los datos
Identificar las reglas comerciales

Usted necesariamente no tiene que realizar esta una tarea por vez. Por ejemplo, mientras identifica la cantidad y los
tipos de datos, usted podra determinar cmo se usarn los datos y qu restricciones deben asociarse a dichos datos. La
Figura 4.1 ilustra el proceso de identificar los requerimientos de diseo.

Figure 4.1 Identificar los requerimientos del sistema.

Identificar las Metas del Sistema

Disear una base de datos requiere de un entendiendo de las funciones comerciales que usted quiere soportar. Tanto
como sea posible, su diseo de la base de datos debe modelar el negocio con precisin. Es significativamente costoso en
tiempo tratar de cambiar el diseo de una base de datos una vez que se ha implementado. Una base de datos bien
diseada obtiene el mayor rendimiento. Al disear una base de datos, usted debe considerar el propsito de la base de
datos y cmo este afecta el diseo. En otras palabras, usted debe determinar las metas del nuevo sistema. Por qu

http://www.sqlmax.com/centro/moduloI_4.asp?MX= (1 de 4)20/11/2007 04:04:52 a.m.


SQL SERVER Manual en Linea - Modulo 1/4

est creando usted esta base de datos?

Las metas del sistema son las razones por las qu usted est implementando la nueva base de datos. Para crear un
diseo de base de datos eficaz, usted debe tener conocimiento completo y profundo del trabajo que se espera que la
base de datos haga. Sin esta comprensin, usted no puede tomar decisiones informadas sobre cmo la base de datos
debe ser diseada.

Determinar las metas del sistema no siempre es un proceso directo. La mayora de los proyectos de desarrollo de bases
de datos tienen muchas metas (tangibles e intangibles), y intentar descubrirlos puede tomar a menudo una cantidad
importante de trabajo de investigacin. Por ejemplo, una compaa industrial podra decidir automatizar su proceso de
administracin de inventario. Uno de las metas declaradas de la compaa para el proyecto es "para hacer mas fcil
manejar el inventario."

Su trabajo es tomar esta meta intangible y intentar determinar la meta tangible subyacente. Quiere la compaa
acelerar el proceso de administracin del inventario? Quiere rastrear inventario ms con precisin? Quiere reducir
costos? La meta intangible de "hacindolo ms fcil" podra incluir todos stas metas ms tangibles y algunas otras.

Aunque estas metas son ms tangibles, ellas todava son vagas. Las metas vagas tienden a ser declaradas trminos
generales, como "aumento de productividad" o "mejora del rendimiento" Cuando usted pasa por el proceso de identificar
metas, usted debe determinar el grado al que estas metas deben lograrse. Si la meta es aumentar productividad, usted
debe intentar determinar el grado en que esas metas deben lograrse. Siempre que sea posible, sus metas deben ser
directamente mensurables.

Usted debe ser consciente, sin embargo, de los peligros que se presentan al medir ciertas metas. A menudo para
determinar una meta mensurable, usted debe poder establecer una medida inicial. Por ejemplo, si una meta de la base
de datos de inventario es mejorar la exactitud, podra consumir muchos recursos estudiar cunta inexactitud existe en el
proceso actual. Un estudio de esta clase podra abarcar aos de historia del inventario y quizs podra costar ms que
disear e implementar cabo la base de datos. En casos como stos, podra ser mejor hablar primero con gerentes y
tenedores de libros para lograr un sentido general de donde estn los problemas y lo que puede hacerse para
resolverlos. Al determinar que hasta que punto una medida base debe ser estudiada, usted debe tener presente la
balanza del proyecto y su aplicacin prctica manteniendo siempre un sentido de proporcin.

A veces, las metas intangibles pueden ser difciles de traducir en metas ms tangibles. Esta situacin es particularmente
cierta para metas que adoptan la jerga del mercadeo popular. Por ejemplo, la meta declarada podra ser algo que no
parece tener ningn significado o relevancia: "Nosotros queremos el nuevo sistema para mostrar a nuestros clientes que
estamos pensando de manera innovadora y siguiendo la tendencia de ellos, para as mejorar el posicionamiento del
producto." En estos casos, usted debe trabajar estrechamente con la organizacin para definir eso claramente que
significan las metas declaradas.

Despus de que usted ha definido las metas iniciales para la nueva base de datos, usted puede continuar determinando
el tipo y la cantidad de datos que el sistema soportar. Sin embargo, cuando usted avance con el proceso de diseo de
la base de datos, deber estar preparado para reevaluar estas metas. Cuando los proyectos avanzan, la direccin
cambia, los requerimientos comerciales cambian, y se revisan las expectativas de la compaa. Como resultado, las
metas evolucionan, lo cual significa que el diseo de la base de datos podra necesitar ser modificado. Usted tambin
podra descubrir, cuando usted excava ms profundamente en el proyecto, que algunas metas son inalcanzables o
impropias. Dado que surgen nuevas comprensiones y nueva informacin a ser administrada, usted debe prepararse a
actuar de acuerdo con esto.

Identificar la Cantidad y Tipos de Datos

La cantidad y tipos de datos que su base de datos guardar pueden afectar el rendimiento de la base de datos y debe
tenerse en cuenta al crear su base de datos. La cantidad de datos, por supuesto, afecta el tamao de su base de datos,
y los tipos de datos son un factor que determina los tipos de restricciones que se incorporarn al diseo de la base de
datos.

En muchos casos, determinar la cantidad y tipos de datos es un proceso directo porque un sistema antiguo ya se
encuentra funcionando y usted simplemente est actualizando o reemplazando ese sistema. En estas situaciones, usted
puede examinar el cuerpo de datos que ya existen.

En los casos en los que usted est llevando a cabo un nuevo sistema, o uno que radicalmente altera el trabajo, su labor
podra ser un poco ms difcil porque podra tener que gastar una importante cantidad de tiempo en determina qu tipos
de datos se guardarn y cunto datos habr. Usted podra necesitar entrevistar a los participantes importantes y
coleccionar copias de documentos pertinentes y formas, como facturas de venta, los listados de inventario, los informes
de direccin, y cualquier otro documento que est usndose actualmente.

Usted debe determinar el volumen de datos que el sistema manejar. Cuando examine el volumen de datos, debe

http://www.sqlmax.com/centro/moduloI_4.asp?MX= (2 de 4)20/11/2007 04:04:52 a.m.


SQL SERVER Manual en Linea - Modulo 1/4

identificar la cantidad actual de datos y su modelo de crecimiento. Por ejemplo, un almacn podra llevar slo unos mil
artculos actualmente, pero podra estar planeando agregar varios centenar al da durante los prximos aos para
aumentar la artculos disponibles en el stock. Otro almacn podra llevar millones de artculos pero podra planear
agregar slo unos nuevos artculos al da y nunca permitir que el inventario vaya mucho ms all de su capacidad
actual. Los modelos de crecimiento para estos dos sistemas son muy diferentes, y como resultado, el diseo variar.

Al mirar los tipos de datos, usted est bsicamente intentando conseguir un sentido general de las categoras de
informacin que usted estar guardando y qu detalles sobre las categoras son necesarios guardar. Este proceso lo
preparar por exponer las entidades y atributos que usted incorporar en su diseo de la base de datos. Por ejemplo, si
usted est desarrollando una base de datos para un minorista de la ropa, los tipos de datos podran incluir informacin
sobre clientes que compran productos de la tienda. La informacin del cliente podra incluir nombres, direcciones,
nmeros de telfono, y incluso las preferencias de estilo.

A estas alturas en el proceso del diseo, usted no tiene que ponerse demasiado especfico sobre cmo deben
categorizarse los datos o deben agruparse. Usted est intentando ganar un sentido general de los tipos de datos
involucrados y creando una lista centralizada para esos tipos de datos. Cuando usted empiece a identificar realmente los
objetos de la base de datos, usted tomar la informacin que recogi aqu y la usar para desarrollar un modelo de
datos.

Identificar Cmo se usarn los Datos

Cuando usted recoge los requerimientos del sistema, usted debe determinar cmo se usar la informacin en su base de
datos. El propsito de este paso es identificar quin estar usando los datos, el nmero de usuarios que estarn
accediendo a los datos, y las tareas que ellos estarn realizando cuando accedan ese datos.

Al determinar quin estar usando los datos, usted debe pensar en trminos de categoras de usuarios. Por ejemplo, una
categora de usuarios podra ser el pblico general (quin accede a los datos a travs del Internet). Usted tambin
podra tener otra categora de usuarios que acceden datos a travs del intranet de la compaa. Algunas organizaciones
podran tener slo un tipo de usuario, mientras otras organizaciones podran tener muchos tipos. No hay ningn mnimo
fijo o nmero del mximo de usuarios que cada categora debe contener. Las nicas limitaciones son aquellas dictadas
por configuraciones del hardware y diseo de la base de datos. Una categora podra contener a slo un usuario,
mientras otra categora podra contener a 100.000 usuarios.

Cuando usted determina quin estar usando los datos, usted tambin debe identificar cuntos usuarios en cada
categora estarn accediendo a los datos. Esta estimacin no slo debe incluir los nmeros actuales pero los valores
proyectados, tambin. Adems, usted tendr que definir la concurrencia de los usuarios. Usted debe saber que cuntas
personas se conectarn a la vez a la base de datos y cuntos podra estar intentando actualizar simultneamente la base
de datos.

Una vez que ha definido quines y cuntos son sus usuarios, usted debe identificar las tareas que ellos estarn
realizando cuando acceden a la base de datos. Por ejemplo, suponga que una compaa industrial incluye una categora
de usuarios que toman rdenes de clientes. Este grupo de tomadores de ordenes deben poder acceder y actualizar
informacin del cliente. Adems, deben poder ver los datos del inventario para hacer los pedidos. La compaa tambin
podra incluir una categora de usuarios de recursos humanos. El grupo de recursos humano debe poder ver y actualizar
informacin del empleado. Identificando estas tareas, usted puede determinar cmo ser accedida la base de datos y
cmo se vern y manipularn los datos. Cuando usted combina esta informacin con el nmero y tipo de usuarios, usted
podr llevar a cabo un diseo de la base de datos que satisface las necesidades de todos en la organizacin.

Identificar las Reglas Comerciales del Sistema

Al identificar las reglas comerciales, usted est determinando las restricciones que gobiernan cmo deben manejarse y
protegerse los datos y el sistema. Estas restricciones se refieren van ms all que la integridad individual de los
atributos de la entidad. Las reglas comerciales son mucho ms amplias e incorporan todas las restricciones del sistema,
incluidas la integridad de los datos y la seguridad del sistema. En otras palabras, usted est definiendo lo que cada
categora de usuarios puede o no puede hacer.

Volviendo al ejemplo de la compaa industrial, el grupo de tomadores de rdenes pueden acceder y actualizar registros
de los clientes y ver los datos de inventario. Sin embargo, usted podra determinar que estos usuarios no deben poder
actualizar datos del inventario y no deben poder ver datos de los empleados. Usted tambin podra determinar que
ningn archivo del cliente puede crearse sin que se complete la direccin de envo y el nmero de telfono. Otra
restriccin podra ser que cualquier artculo agregado a un orden del cliente debe quitarse del inventario. Las reglas
comerciales pueden incluir un amplio espectro de restricciones, algunas que pertenecen en conjunto al sistema y otras
que pertenecen a los tipos especficos de datos.

Resumen del tema


Antes de que usted pueda desarrollar a un modelo del datos, usted debe identificar las metas de su proyecto de base de

http://www.sqlmax.com/centro/moduloI_4.asp?MX= (3 de 4)20/11/2007 04:04:52 a.m.


SQL SERVER Manual en Linea - Modulo 1/4

datos, el tipo y cantidad de datos con los que usted estar trabajando, cmo se usarn esos datos, y cualquier
restriccin comercial que deber existir sobre los datos. Usted debe considerar el propsito de la base de datos y cmo
afecta el diseo. Usted debe tener una comprensin clara de por qu usted est creando esta base de datos. Otra rea
de preocupacin cuando se estn identificando los requerimientos del sistema es la cantidad y tipo de datos que su base
de datos almacenar. Cualquier sea el sistema actual, usted debe determinar el volumen de datos que el sistema
manejar. Cuando examina el volumen de los datos, usted debe determinar la cantidad real de datos y su modelo de
crecimiento. Al mirar los tipos de datos, usted est intentando conseguir un sentido general de las categoras de
informacin que bsicamente se estarn guardando y qu detalles sobre las categoras son necesarios guardar. Cuando
usted recoge requerimientos del sistema, usted debe identificar quin estar usando los datos, el nmero de usuarios
que estarn accediendo a los datos, y las tareas que ellos estarn realizando sobre esos datos. Al identificar las
restricciones sobre los datos, usted estar determinando las reglas comerciales que gobiernan cmo deben manejarse y
protegerse los datos. Las reglas comerciales incluyen tanto la integridad de los datos as como la seguridad del sistema.
Ellos le permiten definir lo que cada categora de usuarios puede y no puede hacer.

< Programa Ejercicio 1 > Tema 5 >

http://www.sqlmax.com/centro/moduloI_4.asp?MX= (4 de 4)20/11/2007 04:04:52 a.m.


SQL SERVER Manual en Linea - Modulo 1/5

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO I

Tema 5: Desarrollar el Modelo Lgico de Datos

Lo que aprender:

Al terminar este tema usted podr:


Identificar entidades y sus atributos.
Identificar relaciones entre las entidades.
Definir restricciones en los datos.

Identificar Entidades y Sus Atributos

Cuando se recogen los requisitos del sistema para al diseo de la base de datos, uno de los pasos que se realizan es el
de definir los tipos de datos que contendr la base de datos. Pueden separarse estos tipos de datos en categoras que
representan una divisin lgica de informacin. En la mayora de los casos, cada categora de tipo de dato se traduce en
un objeto tabla dentro de la base de datos. Hay normalmente, un conjunto de objetos primarios, y despus de que ellos
son identificados, surgen los objetos relacionados.

Por ejemplo, en la base de datos Editores, uno de los objetos primarios es la tabla Titulos. Uno de los objetos
relacionado a la tabla Ttulos es la tabla de RoyAgenda que proporciona informacin sobre la agenda de royalties
asociada con cada libro. Otro objeto es la tabla TituloAutor que vincula a los autores con los libros.

Usando las categoras de datos definidas en los requisitos del sistema, se puede empezar a crear un mapa del objeto
tabla dentro de la nueva base de datos. Por ejemplo, suponga que usted est diseando una base de datos para el
sistema de reservaciones de un hotel. Durante el proceso de recoleccin de requisitos de sistema, identifica varias
categoras de datos, incluido los cuartos, huspedes, y reservaciones. Como resultado, agrega tablas a su diseo de la
base de datos que representan a cada una de estas categoras, como se muestra en la Figura 5.1.

Figura 5.1 Los objetos primarios en un diseo de la base de datos: la tabla Habitaciones, la tabla Reservas, y la tabla
Huespedes.

Al identificar las reglas comerciales para este sistema, usted determin que el hotel tiene ocho tipos de cuartos y que los
huspedes regulares prefieren un cierto tipo de cuarto. Como resultado, tanto la tabla Habitaciones como la tabla
Huespedes debern incluir un atributo de tipo de cuarto. Usted decide crear una tabla para los tipos del cuarto, como se
muestra en Figura 5.2.

Figura 5.2 La base de datos de reservaciones del hotel que incluye la tabla de TipoHab.

http://www.sqlmax.com/centro/moduloI_5.asp?MX= (1 de 4)20/11/2007 04:04:56 a.m.


SQL SERVER Manual en Linea - Modulo 1/5

Ahora, la tabla Habitaciones y la tabla Huespedes referencian a la tabla TipoHab sin tener que repetir una descripcin del
cuarto para cada cuarto y cada husped. Adems, ante un cambio en los tipos de cuarto, usted puede actualizar la
informacin en un solo lugar, en lugar de tener que actualizar mltiples tablas y archivos.

Antes de que usted pueda completar el proceso de definir objetos de la tabla dentro de la base de datos, debe definir las
relaciones entre las tablas. Siempre que identifique una relacin muchos-a-muchos, tendr que agregar una tabla de
unin. Se discuten relaciones con ms detalle adelante en este tema.

Despus de que usted ha definido todas las tablas que puede definir a estas alturas, puede definir las columnas
(atributos) para esas tablas. De nuevo, usted estar tomando esta informacin directamente de los requisitos del
sistema en los que identific qu tipos de datos deben ser incluidos en cada categora de informacin.

Usando el ejemplo de base de datos del hotel, suponga que determin durante el proceso de recoleccin de requisitos
del sistema que la categora Huespedes debe incluir informacin la siguiente informacin sobre los huspedes: nombre,
apellido, direccin, nmero de telfono, y preferencias del cuarto. Como resultado, usted planea agregar columnas a la
tabla de los Huespedes para cada uno de estos tipos de informacin. Usted tambin planea agregar un identificador
nico para cada husped, tal como con cualquier entidad normalizada. La Figura 5.3 muestra la tabla Huespedes con
todas las columnas que contendr la tabla.

Figura 5.3 La tabla Huespedes y sus atributos.

Identificar Relaciones Entre las Entidades

Despus de que ha definido las tablas y sus columnas, usted debe definir las relaciones entre las tablas. A travs de este
proceso, podra descubrir que necesita modificar el diseo que ha creado.
Empiece escogiendo una de las tablas primarias y seleccionando las entidades que tienen relaciones con esa tabla.
Siguiendo con el ejemplo del hotel, asuma que los requisitos del sistema indican que todas las reservaciones deben
incluir cuarto e informacin del husped. Los cuartos, huspedes, y reservaciones son las categoras de datos. Como
resultado, usted puede deducir que una relacin existe entre los cuartos y reservaciones y entre los huspedes y
reservaciones. La Figura 5.4 muestras las relaciones entre estos objetos. Una lnea que conecta las dos tablas significa
una relacin. Advierta que una relacin tambin existe entre la tabla Habitaciones y la tabla TipoHab y entre la tabla
Huespedes y la tabla TipoHab.

http://www.sqlmax.com/centro/moduloI_5.asp?MX= (2 de 4)20/11/2007 04:04:56 a.m.


SQL SERVER Manual en Linea - Modulo 1/5

Figura 5.4 Las relaciones que existen entre las tablas en la base de datos de las reservaciones del hotel.

Una vez que establece que una relacin existe entre las tablas, usted debe definir el tipo de relacin. En la Figura 5.4,
cada relacin (lnea) es marcada a cada extremo (donde conecta a una tabla) con el nmero 1 o con un smbolo de
infinito (8). El 1 se refiere al lado uno de una relacin, y el smbolo de infinito se refiere al lado muchos de una relacin
uno-a-muchos. Algunos autores tambin las llaman relaciones 1:N.

Para determinar los tipos de relaciones que existen entre las tablas, usted debe mirar los tipos de datos que cada tabla
contiene y los tipos de conexiones entre ellos. Por ejemplo, una relacin existe entre la tabla Huespedes y la tabla
Reservas. La relacin existe porque los huspedes son parte de la informacin que se recaba cuando se registra una
reservacin. Segn las reglas comerciales, un husped puede hacer una o ms reservaciones, pero cada reservacin
grabada puede incluir solo el nombre de un husped, normalmente la persona que est haciendo la reservacin. Como
resultado, una relacin uno-a-muchos existe entre las dos tablas: un husped, una o muchas reservaciones.

Una relacin tambin existe entre la tabla Reservas y la tabla Habitaciones. Segn las reglas comerciales, una
reservacin puede solicitar uno o ms cuartos, y un cuarto puede ser incluido en una o ms reservaciones (en fechas
diferentes). En este caso, existe una relacin muchos-a-muchos: muchas reservaciones a muchos cuartos. En un diseo
de base de datos normalizado, sin embargo, relaciones muchos-a-muchos deben ser modificadas agregando una tabla
de unin y creando una relacin uno-a-muchos entre cada tabla original y la tabla de unin, como se muestra en la
Figura 5.5.

Figura 5.5 La tabla de HabReservas como tabla de unin entre la tabla Habitaciones y la tabla Reservas.

Identificar Restricciones sobre los Datos

A estas alturas del proceso de diseo de la base de datos, usted debera tener definidas las entidades, sus atributos, y

http://www.sqlmax.com/centro/moduloI_5.asp?MX= (3 de 4)20/11/2007 04:04:56 a.m.


SQL SERVER Manual en Linea - Modulo 1/5

las relaciones entre entidades. Ahora, usted debe identificar las restricciones sobre los datos que se guardarn en las
tablas. El mayor trabajo ya fue completado cuando usted identific las reglas comerciales al momento de recoger los
requisitos del sistema. Como se vio, las reglas comerciales incluyen todo las restricciones en un sistema, incluida la
integridad de los datos y la seguridad del sistema. Para esta fase del proceso de diseo, su enfoque se centrar en las
restricciones sobre los datos. Usted tomar las reglas comerciales relacionadas a los datos y las refinar y organizar.
Debe intentar organizar las restricciones en base a los objetos que cre en la base de datos, y formularlas de modo que
se refieran a ellos.

Volviendo al diseo de la base de datos de la Figura 5.5, suponga que una de las reglas comerciales indica: "Un registro
de husped puede, pero no es obligatorio, incluir una preferencia por uno de los tipos de cuarto predefinidos pero no
puede incluir ninguna otra preferencia de tipo de cuarto." Al definir las restricciones sobre los datos, usted debe
referenciar las tablas y columnas pertinentes y dividir la regla comercial de modo que cada restriccin est contenida en
una instruccin simple:
La columna de TipoHabID en la tabla Huespedes no requiere un valor.
Todo valor distinto de NULL en la columna de TipoHabID en la tabla Huespedes debe ser un valor incluido en la
columna de TipoHabID en la tabla de TipoHab.
Una fila en la tabla de los Huespedes puede incluir slo un valor en la columna de TipoHabID.

En cuanto sea posible, usted debe organizar las restricciones sobre los datos segn las tablas y sus columnas. En
algunos casos, una restriccin se aplica al conjunto de una tabla, a ms de una tabla, a una relacin entre las tablas, o a
la seguridad de los datos. En estos casos, intente organizar las restricciones de modo que sea lgica y ms pertinente al
proyecto. La meta de identificar las restricciones sobre los datos es tener un mapa claro del camino para cuando se
creen los objetos de la base de datos y sus relaciones que fuerce la integridad de los datos

< Programa Ejercicio 2 >

http://www.sqlmax.com/centro/moduloI_5.asp?MX= (4 de 4)20/11/2007 04:04:56 a.m.


SQL SERVER Manual en Linea - Ejercicios

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO I

Ejercicio 1: Identificar los Requerimientos de Diseo de la base de datos

En este ejercicio, usted repasar el siguiente caso. De la informacin descripta en el caso, usted identificar los
requerimientos del sistema para el diseo de la base de datos. Usted estar usando este caso y el resultado de este
ejercicio en ejercicios subsecuentes. El producto final ser la base de datos que usted ha diseado y ha llevado a cabo
en SQL Server. Dado usted necesita guardar el resultado de este ejercicio, sin embargo, que usted podra querer
copiarlo en un archivo de su procesador de palabras o archivo de texto.

NOTA
Al disear un sistema de la base de datos relacional, sus especificaciones del diseo incluyen a menudo las aplicaciones
que son necesarias para acceder a los datos. Para los propsitos de este kit de entrenamiento, sin embargo, los
ejercicios se enfocarn en disear y llevar a cabo slo el componente de la base de datos del sistema entero.

Caso de una librera

El gerente de una librera pequea le ha pedido disear y llevar a cabo una base de datos que centraliza informacin
para que sea ms fcil y ms eficaz de manejar el inventario, las rdenes de pedido y las ventas. La tienda maneja
libros raros y agotados y tiende a llevar slo unos mil ttulos en cualquier momento. Actualmente, el gerente registra
todas las ventas y el inventario en papel. Para cada libro, el gerente escribe el ttulo, autor, editor, la fecha de la
publicacin, edicin, costo, precio minorista sugerido, y una valoracin que indica el estado del libro. A cada libro se le
asigna una de las siguientes valoraciones: extraordinario, excelente, bueno, justo, pobre, o daado. Al gerente le
gustara poder agregar una descripcin a cada valoracin (slo un par de frases), pero la descripcin no debe ser
obligatoria. La informacin sobre cada libro debe incluir el ttulo, autor, costo, precio minorista sugerido, y valoracin. El
editor, fecha de la publicacin, y edicin no siempre estn disponibles. Si el ao en que un libro fue publicado est
disponible, el ao nunca ser anterior al 1600. Y para los propsitos del nuevo sistema de la base de datos, la fecha de
la publicacin se nunca caer despus del ao 2099.

Dado que estos libros son raros, cada ttulo debe registrarse individualmente, an si son el mismo libro (ttulo idntico,
autor, editor, fecha de la publicacin, y edicin). Actualmente, el gerente asigna un nico ID a cada libro para que
puedan diferenciarse ttulos idnticos. Este ID debe ser incluido con la informacin del libro. El ID de libro asignado por
el gerente es un ID de ocho caracteres compuestos de nmeros y letras.

El gerente tambin mantiene informacin limitada sobre cada autor de los libros que han pasado por la tienda. La tienda
podra tener ms de un libro por autor, y a veces un libro a sido escrito por de un autor. El gerente mantiene
informacin actualmente de aproximadamente 2500 autores. La informacin incluye el nombre del autor, el apellido, ao
de nacimiento, y ao de muerte (si es aplicable). La informacin debe incluir como mnimo el apellido del autor. Al
gerente le gustara incluir una descripcin breve de cada autor, cuando la dispone, cuando un autor se agrega a la lista.
La descripcin normalmente no exceder a una o dos frases.

La librera tiene 12 empleados (incluidos el gerente y su asistente). El gerente espera contratar a un empleado adicional
todos los aos durante los prximos aos. El gerente y su asistente deben poder acceder y modificar informacin sobre
cada empleado. La informacin del empleado debe incluir el nombre, el apellido, direccin, el nmero de telfono, fecha
de nacimiento, fecha de ingreso, y cargo en la tienda. Los cargos incluyen a Gerente, Asistente de Gerente, Empleado de
Ventas Full Time Lleno, y Empleado de Ventas Part Time. El gerente podra querer en algn momento agregar un nuevo
cargo a la lista o cambiar uno que existe y le gustara en el futuro agregar una descripcin breve de los deberes del
trabajo a cada cargo (por lo menos, a algunos de los cargos). Un empleado puede tener slo un cargo en un momento
dado. Ningn empleado, fuera de los dos gerentes, debe tener acceso a la informacin del empleado. Al gerente le gusta
tambin registrar cuntos y qu libros est vendiendo cada empleado.

La librera mantiene informacin actualmente sobre los clientes. Para cada cliente, la informacin incluye el nombre del
cliente, apellido, nmero de telfono, direccin de correo de envo, libros que el cliente ha comprado, y fecha de la
compra. Dado que a algunos clientes no les gusta repartir informacin personal, slo el nombre o el apellido son
obligatorios. El gerente tiene actualmente una lista de aproximadamente 2000 clientes. No todos los clientes que son
incluidos en la lista han comprado libros, aunque la mayora s.

http://www.sqlmax.com/centro/EjercicioI_1.asp?MX= (1 de 3)20/11/2007 04:04:58 a.m.


SQL SERVER Manual en Linea - Ejercicios

El gerente mantiene un registro de ventas de cada pedido con datos sobre la fecha del pedido y la fecha de cuando se
complet la venta. En algunos casos, como con los clientes sin pedido previo, estos dos eventos ocurren
concurrentemente. Cada orden debe incluir informacin sobre el libro vendido, el cliente que compr, el vendedor que
vendi, la cantidad de la venta, y la fecha de la orden. La orden tambin debe incluir la fecha en que el libro debe ser
entregado o retirado. Una orden se completa cuando el libro se ha pagado y es retirado de la tienda o enviado al cliente.
Un libro no puede sacarse de la tienda o puede enviarse a menos que se haya pagado. Cada orden incluye el mtodo del
pago y el estado de la orden. Los mtodos del pago incluyen dinero en efectivo, cheque, y tarjetas del crdito. Los
estados de una orden pueden ser uno de los siguientes: (1) para ser enviado, (2) a ser retirado por el cliente, (3)
enviado, o (4) retirado. Una orden puede tener slo un cliente, vendedor, fecha del orden, fecha de la entrega, mtodo
de pago, y estado del orden; sin embargo, una orden puede contener uno o ms libros.

Actualmente, se generan rdenes, se rastrean, y se modifican en formas de orden en papel. Las formas se usan para
asegurarse que los rdenes se envan (si es aplicable) y para mantener un registro de ventas. Siempre que un libro se
agrega a una orden, es eliminado de la lista del inventario. Este proceso ha sido muy tedioso y no siempre eficaz. Esta
situacin tambin puede llevar a confusin y errores. Al gerente le gustara, que los libros vendidos permanecieran en la
lista de libros pero marcados para mostrar de algn modo que el libro se ha vendido.
La tienda vende aproximadamente 20 libros al da. La tienda est abierta cinco a la semana por aproximadamente 10
horas por da. Hay uno a dos vendedores que trabajan al mismo tiempo, y hay dos contadores de ventas donde las
personas retiran y pagan por los libros y donde se procesan las rdenes de los vendedores. Siempre est en la tienda al
menos uno de los dos gerentes.

El gerente espera que las ventas aumenten aproximadamente un 10 por ciento al ao. Como resultado, el nmero de
libros disponible, autores, y clientes debern todos aumentar en la misma proporcin.

Para servir a los clientes eficazmente, cada empleado debe poder acceder a una fuente centralizada de informacin
sobre los autores, libros, clientes, y rdenes. Actualmente, los empleados acceden a esta informacin a travs de las
tarjetas del ndice y de listas. A menudo, estas listas no estn actualizadas, y tienen errores. Adems, cada empleado
debe poder crear, rastrear, y modificar un pedido online, en lugar de tener que mantener las formas de orden en papel.
Sin embargo, slo los gerentes deben poder modificar informacin sobre los autores, libros, y clientes.

Para identificar metas del sistema


1. Repase el caso. No intente memorizar todos los detalles; en cambio, intente conseguir un sentido general de lo que el
proyecto est intentando lograr.
2. Apunte las metas del sistema que usted puede identificar en el caso.
Cules son esas metas?
3. Repase cada meta para determinar si es mensurable.
Qu metas son mensurables?

Para identificar la cantidad y tipo de datos


1. Apunte las categoras de datos que usted puede identificar en este caso.
Qu categoras de datos puede identificar?

2. Para cada categora de datos que identific en el Paso 1, apunte el tipo de informacin que usted debe registrar para
cada categora.
Qu tipo de informacin puede identificar?

3. Para cada categora de datos que identific en el Paso 1, apunte la cantidad actual de datos por categora.
Cul es el volumen de datos para cada categora?

4. Para cada categora de datos que identific en el Paso 1, apunte el modelo de crecimiento esperado.
Cul es el modelo de crecimiento para cada categora?

Para identificar cmo se usarn los datos


1. Apunte las categoras de usuarios que puede identificar en este caso.
Cules son esas categoras de usuarios?

2. Para cada categora de usuario que identific en el Paso 1, apunte el nmero de usuarios.
Cul es el nmero actual de usuarios y el nmero proyectado de usuarios en cada categora?

3. Para cada categora de usuario que identific en el Paso 1, apunte las tareas que ellos realizan.
Qu tareas realizar cada tipo de usuario?

Para identificar reglas comerciales


1. Apunte las reglas comerciales que usted puede identificar en este caso.
Cules son las reglas comerciales?

http://www.sqlmax.com/centro/EjercicioI_1.asp?MX= (2 de 3)20/11/2007 04:04:58 a.m.


SQL SERVER Manual en Linea - Ejercicios

< Programa < Tema 3 Tema 4 >

http://www.sqlmax.com/centro/EjercicioI_1.asp?MX= (3 de 3)20/11/2007 04:04:58 a.m.


SQL SERVER Manual en Linea - Modulo 2/1

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO II: Implementar una base de datos y sus tablas

Tema 1: Crear y administrar una base de datos SQLServer

El primer paso para implementar fsicamente una base de datos es crear los objetos de la base de datos. Usando la
informacin que obtuvo cuando se determinaron los requerimientos de diseo, y los detalles que identific en el diseo
lgico de la base de datos, Ud. puede crear los objetos de la base de datos y definir sus caractersticas. Podr modificar
estas caractersticas despus que haya creado los objetos de la base de datos.

Cuando cree una base de datos, deber primero definir su nombre, su tamao, y los archivos y grupos de archivos
usados para soportarla. Deber considerar varios factores antes de crear la base de datos:

Por defecto solo tienen permiso para crear bases de datos los miembros de los roles sysadmin y
dbcreator, Ud. podra no tener asignados ninguno de dichos roles pero an contar con la autorizacin para crear
bases de datos en caso que el administrador se los hubiera otorgado.

El usuario que crea una base de datos se convierte en el dueo de la base de datos

Un mximo de 32.767 bases de datos pueden ser creadas sobre un servidor.

El nombre de la base de datos debe seguir las reglas de los identificadores.

Como ya indicamos, se usan tres tipos de archivos para almacenar una base de datos: archivos primarios, que contienen
la informacin de arranque para la base de datos; archivos secundarios, que hospedan a todos los datos que no caben
en el archivo primario; y registro de transacciones, que contienen la informacin de la transacciones, usadas para
recuperar la base de datos. Toda base de datos tiene al menos dos archivos: un archivo primario y un registro de
transacciones.

Cuando se crea una base de datos, los archivos se llenan de ceros para sobrescribir cualquier otro dato que archivos que
han sido borrados puedan haber dejado en el disco. Aunque esto significa que los archivos pueden tardar en ser creados,
esta accin evita al sistema operativo tener que llenar con cero los archivos al momento de la efectiva grabacin de los
datos durante la normal operacin de la base de datos, mejorando la performance operacional de cada da.

Cuando Ud. crea una base de datos, deber especificar el tamao mximo que un archivo tiene autorizado a alcanzar.
Esto previene que el archivo crezca, cuando los datos son ingresados, hasta que el espacio en disco se termine.

SQLServer implementa una nueva base de datos en dos pasos:

SQLServer usa una copia de la base de datos Model para inicializar la nueva base de datos y sus metadatos.

SQLServer luego llena el resto de la base de datos con pginas vacas (excepto aquellas pginas que tienen
grabados datos internos como el espacio usado)

Cualquier objeto definido por el usuario en la base de datos Model es copiado a todas las bases de datos que sean
creadas. Se pueden agregar objetos a la base de datos Model, tales como tablas, vistas, procedimientos almacenados,
tipos de datos, etc. que sern incluidos en las nuevas bases de datos. Adems, cada nueva base de datos hereda la
configuracin de la opciones de la base de datos Model.

Mtodos para crear una base de datos SQLServer

SQLServer provee muchos mtodos que se pueden utilizar para crear bases de datos: el comando Transact-SQL
CREATE DATABASE, el rbol de la consola del Enterprise Manager, y el asistente Create Database , al cual puede
acceder a travs del SQL Server Enterprise Manager.

El comando CREATE DATABASE

http://www.sqlmax.com/centro/moduloII_1.asp?MX= (1 de 3)20/11/2007 04:05:04 a.m.


SQL SERVER Manual en Linea - Modulo 2/1

Se puede usar el comando CREATE DATABASE para crear una base de datos y los archivos almacenados en una base de
datos. El comando CREATE DATABASE le permitir especificar una serie de parmetros que definirn las caractersticas
de la base de datos.

Por ejemplo, se puede especificar el mximo tamao que puede alcanzar un archivo o el incremento que puede
experimentar dicho archivo. Si slo utiliza CREATE DATABASE nombre_de_la_base_de_datos la base de datos es creada
del mismo tamao de la base de datos Model.

El comando puede ser ejecutado desde el SQL Query Analizer. El siguiente ejemplo crea una base de datos llamadas
Productos y especifica que se usar un solo archivo.

El archivo especificado ser el archivo primario, y un archivo de registro de 1Mb se crea automticamente. Dado que ni
megabytes (Mb) ni kilobytes (Kb) son especificados en el parmetro SIZE para el archivo primario, el archivo ser
generado en megabytes. Adems, al no consignarse una especificacin de archivo para para el archivo de transacciones,
el archivo de transacciones no tendr un tamao mximo (MAXSIZE) y podr crecer hasta ocupar todo el espacio en el
disco.

USE master
GO
CREATE DATABASE Productos
ON
(
NAME = prods.dat,
FILENAME = c:\program files\Microsoft SQL server\mssql\data\prods.mdf,
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1
)
GO

Usar el Enterprise Manager

Se puede crear una base de datos directamente utilizando la herramienta SQL Server Enterprise Manager. Para crear
una base de datos en el Enterprise Manager, expanda la consola del rbol de su servidor, haga clic derecho en el nodo
Database, y haga clic en New Database. Cuando el cuadro de propiedades aparezca, modifique los valores por defecto
como sea necesario en orden a crear la nueva base de datos.

La figura muestra el cuadro de dilogo Database Properties cuando este se abre por primera vez.

El asistente Create Database

El asistente Create Database lo lleva a travs de una serie de pasos necesarios para para crear una nueva base de
datos. Se accede al asistente seleccionando Wizards desde el men Tools. Desde all se debern completar los pasos que
presenta el asistente. En la Figura se muestran varias opciones que pueden ser modificadas cuando se ejecuta el
asistente.

http://www.sqlmax.com/centro/moduloII_1.asp?MX= (2 de 3)20/11/2007 04:05:04 a.m.


SQL SERVER Manual en Linea - Modulo 2/1

Figura 1: La pestaa General del cuadro de dilogo Database Properties para una nueva base de datos

Administrar una base de datos SQL Server

Una vez que se ha creado la nueva base de datos, Ud. podr ver informacin acerca de dicha base de datos, modificar
sus caractersticas o eliminar la base de datos.

Ver informacin referida a la base de datos

Se puede ver la definicin de la base de datos y sus opciones de configuracin en casos de problemas de funcionamiento
o cuando se considere necesario realizar cambios en la base de datos. SQL Server provee diferentes mtodos que se
pueden utilizar para ver informacin acerca de la base de datos: el procedimiento almacenado sp_helpdb, la sentencia
DATABASEPROPERTYEX, mediante el uso del SQL Server Enterprise Manager.

Borrar una base de datos SQL Server

Se puede eliminar una base de datos SQL Server cuando esta no ser necesaria o cuando es movida a otra base de
datos o a otro servidor. Cuando una base de datos es eliminada, esto se produce de manera permanente y no puede ser
recuperada sin usar un resguardo (backup) previo. Las bases de datos de sistema (Model, MSdb, Master y Tempdb) no
pueden ser eliminadas.

La base de datos Master debera ser resguardada despus que se elimina una base de datos, porque el borrar una base
de datos actualiza las tablas del sistema en la base de datos Master. Si la base Master necesita ser recuperada, cualquier
base de datos que ha sido eliminada desde el ltimo resguardo que se hizo, estara an siendo referenciada y podra
generar mensajes de error.

Una base de datos puede ser eliminada utilizando el comando DROP DATABASE o ser borrada desde la consola del rbol
en el SQL Server Enterprise Manager.

< Programa Tema 2 >

http://www.sqlmax.com/centro/moduloII_1.asp?MX= (3 de 3)20/11/2007 04:05:04 a.m.


SQL SERVER Manual en Linea - Modulo 2/2

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO II: Implementar una base de datos y sus tablas

Tema 2: Identificar Tipos de Datos

Una vez que se ha creado una base de datos, se crearn las tablas que guardarn los datos dentro de la base de datos.

Para crear estas tablas, sin embargo, se deben definir previamente los tipos de datos que sern definidos para cada
columna. Un tipo de dato es un atributo que especifica como sern los datos que pueden ser almacenados en una
columna, parmetro, o variable.

SQL Server provee de un conjunto de tipos de datos predefinidos. Adems, se pueden crear tipos de datos definidos por
el usuario, este punto intentar explicar como identificar que tipos de datos se deben emplear cuando se define una
columna.

Tipos de datos provistos por el sistema

En SQL Server cada columna tiene un tipo de dato definido, el cual es un atributo que especifica como sern los datos
que pueden guardarse en esa columna (nmeros enteros, caracteres, valores monetarios, fechas, etc.). Otras objetos,
adems de las columnas, tienen tambin asociados tipos de datos, los objetos que tienen asociados tipos de datos son:

Columnas en tablas y vistas

Parmetros de procedimientos almacenados

Variables

Funciones Transact-SQL que retornan uno o mas valores de un tipo especfico de dato.

Procedimientos almacenados que tienen un cdigo return (el cual siempre es un valor entero)

Asignar tipos de datos a cada columna es uno de los primeros pasos que se dan en el diseo de una base de datos. SQL
Server provee un conjunto de tipos de datos predefinidos por el sistema. Los tipos de datos se pueden utilizar para
asegurar la integridad de los datos, dado que un dato para ser grabado o modificado deber ajustarse al tipo de dato
especificado para la columna a la que pertenece, segn fue establecido en comando original CREATE TABLE. Por
ejemplo, no se puede grabar el apellido de alguien en una columna definida como tipo de dato fecha y hora (datetime),
dado que esta columna solo aceptar datos de fechas y horas.

El asignar un tipo de dato a un objeto define cuatro atributos del objeto:

El tipo de dato contenido por el objeto. Por ejemplo, el dato podra ser carcter, entero o binario.

La longitud o el tamao del valor almacenado. Las longitudes de los tipos image (imgenes), binary (binarios)
y varbinary ( binarios de longitud variable) son definidos en bytes. La longitud de cualquiera de los tipos
numricos de datos es el nmero de bytes necesarios para representar el nmero de dgitos mximo permitido
para ese tipo de dato. Las longitudes para los tipos de datos string (cadena de caracteres) y Unicode son
definidos en caracteres.

La precisin de los nmeros (solamente tipos de datos numricos). La precisin es la cantidad de dgitos que
el nmero puede tener. Por ejemplo un objeto smallint (entero pequeo) puede tener un mximo de cinco
dgitos, por lo que tiene una precisin de cinco.

La escala de un nmero (solamente tipos de datos numricos). La escala de un nmero es la cantidad de


dgitos que puede tener a la derecha de la coma decimal. Por ejemplo, un objeto int (entero) no puede aceptar
dgitos decimales, por lo que su escala es de cero. Un valor monetario puede tener un mximo de cuatro dgitos
decimales y su escala es de cuatro.

http://www.sqlmax.com/centro/moduloII_2.asp?MX= (1 de 4)20/11/2007 04:05:07 a.m.


SQL SERVER Manual en Linea - Modulo 2/2

La tabla siguiente provee la descripcin de las categoras de tipos de datos que SQL Server soporta y las descripciones
de los tipos de datos base que cada categora contiene:

Categora Descripcin Tipo de Dato Base Descripcin


Un dato Binary almacena cadenas
de bits. El dato consiste de
Los datos deben tener la misma longitud fija (hasta
Binary nmeros hexadecimales. Por binary
8 KB)
ejemplo, el nmero decimal 245
vale en hexadecimal F5.
Los datos pueden variar en el nmero de dgitos
varbinary
hexadecimales (hasta 8 KB)
Los datos pueden ser de longitud variable y exceder
image
los 8 KB.
Los datos Character consisten de
cualquier combinacin de letras,
smbolos, y caracteres Los datos deben tener la misma longitud fija (hasta
Character char
numricos. Por ejemplo, datos 8 KB)
character vlidos:"John928"
"(0*&(%B99nh jkJ"
Los datos pueden variar en el nmero de caracteres
varchar
(hasta 8 KB)
Los datos pueden ser cadena de caracteres ASCII
text
que excedan los 8 KB.
Los datos Date time consisten de
combinaciones de fechas o horas
Los datos fecha estn comprendidos entre en el 1 de
vlidas. No existe tipos de datos
Date time datetime Enero de 1753 hasta el 31 de diciembre de 9999
separados para fechas y horas
(requiere 8 bytes por dato).
para almacenar solo fechas o solo
horas
Los datos fecha estn comprendidos entre en el 1 de
smalldatetime Enero de 1900 hasta el 31 de diciembre de 2079
(requiere 4 bytes por dato).
Los datos Decimal consisten de Los datos pueden tener un mximo de 30 dgitos,
datos numricos que son que pueden estar todos a la derecha de la coma
Decimal decimal
almacenados al menor dgito decimal. El tipo de dato almacena un representacin
significativo exacta del nmero.
En SQL Server, el tipo de datos numeric es
numeric
equivalente al tipo de datos decimal.
Datos numricos aproximados
que consisten de datos con una
Floating point aproximacin tanto como el float Desde 1.79E + 308 a 1.79E + 308.
sistema de numeracin binaria
pueda ofrecer
real Desde 3.40E + 38 a 3.40E + 38.
Los datos Integer consisten de
nmeros enteros positivos y Desde 2^63 (9223372036854775808) a 2^631
Integer bigint
negativos tales como: 15, 0, 5, (9223372036854775807). Tamao 8 bytes.
y 2.509.
Desde 2.147.483.648 a 2.147.483.647 (requiere
int
de 4 bytes por valor).
Desde 32,768 a 32.767 (requiere de 2 bytes por
smallint
valor).
tinyint Desde cero a 255 (requiere de 1 bytes por valor).
Monetary representa montos de Desde 922.337.203.685.477,5808 a
Monetary money
dinero positivos o negativos +922.337.203.685.477,5807 Tamao 8 bytes.
Desde 214.748,3648 a 214.748,3647 Tamao 4
smallmoney
bytes.
Special se utiliza para datos que
Consisten en un 1 o un 0. Se usan para representar
Special caben en ninguna de las bit
valores lgicos VERDADERO o FALSO, SI o NO
categors anteriores.

http://www.sqlmax.com/centro/moduloII_2.asp?MX= (2 de 4)20/11/2007 04:05:07 a.m.


SQL SERVER Manual en Linea - Modulo 2/2

Este tipo de dato es usado para variables o


prmetros OUTPUT en procedimientos almacenados
cursor que contenga una referencia a un cursor. Cualquier
variable creada con el tipo de datos cursor puede
tomar valor nulo
Este tipo de datos es usado para indicar la secuencia
de la actividad del SQL Server sobre una fila y es
timestamp
representado por un nmero incremental en formato
binario.
Consiste de nmeros hexadecimales de 16 byte,
indicando un identificador nico global (GUID). Los
uniqueidentifier
GUID son usados cuando una columna deba ser
nica frente a cualquier otra columna.
Este tipo de datos soporta a cualquier otro tipo de
SQL_variant datos soportado por SQL Server excepto text, ntext,
timestamp, image, y sql_variant.
Es utilizado para almacenar un conjunto de
resultados para su posterior procesamiento. El tipo
de datos Table puede ser usado nicamente para
table
para definir variable locales de tipo table o para
retornar valores de una funcin definida por el
usuario.
Al usar tipo de datos Unicode,
una columna puede almacenar
cualquier cualquier caracter
definido por el estndar Unicode.
Lo cual incluye a todos los
Los datos deben tener la misma longitud fija (hasta
Unicode caracteres definidos en los nchar
4000 caracteres Unicode)
distintos conjuntos de caracteres.
Los tipos de datos Unicode toman
el doble de espacio de
almacenamiento que los tipos no-
Unicode.
Los datos pueden variar en el nmero de caracteres
nvarchar
(hasta 4000 caracteres Unicode)
Los datos pueden exceder los 4000 caracteres
ntext
Unicode.

Todos los datos almacenados en el SQL Server deben ser compatibles con uno de estos tipos de datos base. El tipo de
dato cursor es el nico tipo dedatos base que no puede ser asignado a una columna de una tabla. Se puede usar este
tipo de dato solamente para variables y para parmetros de procedimientos almacenados.

Varios tipos de datos base tienen sinnimos (por ejemplo, rowversion es sinnimo de timestamp, y varying es sinnimo
de nvarchar).

Tipos de datos definidos por el usuario

Los tipos de datos definidos por el usuario estn basados en tipos predefinidos por el sistema en SQL Server 2000.

Los tipos de datos definidos por el usuario pueden ser usados en varias tablas que deban guardar el mismo tipo de dato
en una columna y cuando se necesita asegurar que estas columnas tengan exactamente el mismo tipo de dato, longitud
y capacidad de aceptar nulos. Por ejemplo, un tipo de datos definido por el usuario llamado codigo_postal podra ser
creado en base al tipo char.

Cuando se crea un tipo de dato definido por el usuario, se deben proveer los siguientes parmetros:

Nombre

Tipo de datos del sistema sobre el que se basa el nuevo tipo de dato

Anulabilidad (si el tipo de dato permite valores nulos).

http://www.sqlmax.com/centro/moduloII_2.asp?MX= (3 de 4)20/11/2007 04:05:07 a.m.


SQL SERVER Manual en Linea - Modulo 2/2

Cuando la anulabilidad no es explcitamente definida, se toma por defecto la configuracin de nulos ANSI para la base
de datos o conexin.

Si un tipo de datos definido por el usuario es creado en la base de datos Model el tipo de datos estar disponible para
todas las nuevas bases de datos que se creen. Si el tipo de datos es creado en una base de datos definida por el usuario
el tipo de datos slo estar disponible para dicha base de datos.

Se pueden crear tipos de datos definidos por el usuario utilizando el procedimiento almacenado sp_addtype o utilizando
el Enterprise Manager.

< Tema 1 Tema 3 >

http://www.sqlmax.com/centro/moduloII_2.asp?MX= (4 de 4)20/11/2007 04:05:07 a.m.


SQL SERVER Manual en Linea - Modulo 2/3

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO II: Implementar una base de datos y sus tablas

Tema 3: Crear y administrar tablas.

Una vez que se ha creado la base de datos e identificado el tipo de datos, se est listo para crear los objetos tabla que
almacenaran los datos dentro de la base de datos. Cuando se crea una tabla, la definicin de la tabla deber incluir,
como mnimo, el nombre de la tabla, los nombres de las columnas, sus tipos de datos (y longitudes, en caso de ser
necesarios) y si las columnas aceptarn valores NULL. Se pueden configurar otras propiedades posteriormente, aunque
es aconsejable definir la mayor cantidad de propiedades al crear la tabla para evitar problemas posteriores de
mantenimiento. En este punto trataremos como crear tablas, incluyendo como especificar la anulabilidad, generar
valores para las columnas y definir valores por defecto en las columnas. Adems, se ver como obtener informacin
acerca del objeto tabla, modificar las caractersticas de las tablas, y eliminar tablas.

Crear tablas en una base de datos SQL-Server

Una tabla es una coleccin de datos acerca de una entidad especfica, como un cliente, una orden de compra, o un
inventario. Una tabla contiene un conjunto de columnas. Cada columna representa un atributo de la entidad. Por
ejemplo, la fecha de una orden podra ser un atributo de la entidad orden. Cada instancia de la entidad en la tabla es
representada por un solo registro o fila (llamada tambin tupla).

En este punto del desarrollo de la base de datos se deber contar con la informacin necesaria para crear las tablas en
la base de datos. Idealmente, se debera contar con toda la informacin acerca de las tablas, incluyendo tanto las
restricciones de clave primaria PRIMARY KEY como todas las otras restricciones. Primero aprender a crear tablas
bsicas y posteriormente se ver como incorporar las restricciones

Determinar la anulabilidad de las columnas

La anulabilidad de una columna determina si las filas en la tabla pueden contener un valor nulo para esta columna. Un
valor nulo no es lo mismo que un cero, un blanco o una cadena de caracteres de longitud cero. Nulo significa que
ninguna entrada ha sido cargada para ese dato. La presencia de un valor nulo generalmente implica que el valor o es
desconocido o no esta definido. Por ejemplo, un valor nulo en la columna Precio de la tabla Libros de la base Pubs no
significa que no tenga precio, sino que este es desconocido o no ha sido ingresado.

En general, se debe evitar permitir ingresar valores nulos porque ello provoca mayor complejidad en las consultas y
actualizaciones y porque estos no pueden ser usados con algunas opciones de configuracin de las columnas, como la
restriccin PRIMARY KEY. Comparaciones entre dos valores nulos, o entre un valor nulo y cualquier otro valor, retornan
un valor desconocido (unknow) porque el valor de cada NULL es desconocido por definicin. Valores nulos no pueden ser
usados para informacin requerida para distinguir una fila de otra fila en una tabla. Adems, eliminar valores nulos
cuando se estn realizando operaciones de clculo puede ser importante porque ciertos clculos (tales como promedios)
pueden ser inexactos si existe valores nulos dentro de los datos analizados. Si se necesita crear columnas donde algunos
de cuyos valores sern desconocidos se puede crear un valor por defecto que sea asignado en tales casos.

Por ejemplo, la columna Telefono en la tabla Autores de la base de datos Pubs no permite valores nulos. La columna
incluye un valor por defecto DESCONOCIDO para cuando no se tiene el dato. Si el valor para la columna Telefono no es
agregado en el comando de grabacin del registro, el SQL automticamente grabar DESCON en dicha columna. Mas
adelante se ver como definir valores por defecto para las columnas.

Si una fila es insertada pero sin valores para una columna que permite valores nulos, SQL Server provee un valor nulo
(sino existe un definicin por defecto).

Una columna definida con la clusula NULL tambin acepta una entrada explcita de NULL por parte del usuario, sin
importar cual sea el tipo de dato de la columna o si tiene un valor por defecto definido. El valor NULL no debe ser
expresado entre comillas porque ser interpretado como una cadena de caracteres en vez de un valor NULL.

Especificar una columna para que no permita valores nulos puede ayudar a mantener la integridad de los datos
asegurando que la columna tiene datos para todas las filas. Si los valores nulos no son permitidos, el usuario que
ingresa los datos se ver obligado a ingresar datos en la columna o toda la fila ser rechazada por el sistema.

http://www.sqlmax.com/centro/moduloII_3.asp?MX= (1 de 7)20/11/2007 04:05:11 a.m.


SQL SERVER Manual en Linea - Modulo 2/3

Columnas definidas con las clusulas PRIMARY KEY o IDENTITY no pueden permitir valores nulos.

La anulabilidad de una columna se define cuando se define la columna, ya sea cuando se crea o modifica una tabla. Para
definir columnas que permiten o no valores se utilizan las clusulas NULL o NOT NULL respectivamente.

El siguiente ejemplo usa el comando CREATE TABLE para crear la tabla Empleados. La columna Emp_ID y la columna
Apel no permiten valores nulos, mientras que la columna Nombre s.

CREATE TABLE Empleados


(
Emp_ID char(4) NOT NULL,
Nombre varchar(30) NULL,
Apel varchar(30) NOT NULL,
)

Definir valores por defecto

Cada columna en un registro debe contener un valor (an si ese valor es un valor nulo). Hay situaciones en la cuales se
necesita cargar una fila de datos en una tabla donde no se conocen los valores para todas las columnas ( o esos valores
no existen an). Si la columna permite valores nulos, se puede cargar un valor nulo para esa fila. Dado que como vimos
los valores nulos no son aconsejables, una mejor solucin puede ser definir una valor por defecto para esa columna,. Por
ejemplo, es comn asignar un valor cero como el valor por defecto (DEFAULT) para columnas numricas o N/A para
columnas de caracteres cuando no se especifican valores.

La clusula DEFAULT en el comando CREATE TABLE se considera una restriccin an cuando en realidad no fuerza a
nada.

Cuando se carga una fila en una tabla con una definicin de un valor por defecto para una columna, se le est indicando
en forma implcita al SQL Server que cargue el valor por defecto en la columna en aquellos casos que no se indique valor
para dicha columna.

Si una columna no permite valores nulos y no tiene una definicin por defecto, se deber explcita indicar un valor para
esa columna o el SQL Server generar un mensaje de error indicando que la columna no permite valores nulos.

Se puede crear una definicin de valores por defecto para una columna de dos maneras:

Creando la definicin del valor por defecto cuando se crea la tabla (como parte de la definicin de la tabla)

Agregando el valor por defecto a una tabla existente (cada columna permite solo un valor por defecto)

El siguiente ejemplo usa el comando CREATE TABLE para crear la tabla Empleados. Ninguna de las tres columnas
permite valores nulos; sin embargo, la columna Nombre provee la posibilidad de un nombre desconocido al agregar una
definicin por defecto a la definicin de la columna. El comando CREATE TABLE usa la clusula DEFAULT para definir el
valor por defecto:

CREATE TABLE Empleados


(
Emp_ID char(4) NOT NULL,
Nombre varchar(30) NOT NULL DEFAULT desconocido,
Apel varchar(30) NOT NULL,
)

Se puede modificar o eliminar una definicin por defecto existente. Por ejemplo se puede modificar el valor insertado en
una columna cuando no ha sido entrado ningn valor.

Cuando se utilice el Transact-SQL para modificar una definicin por defecto, se debe primero borrar la clusula DEFAULT
existente y luego recrearla con la nueva definicin.

La definiciones DEFAULT no pueden ser creadas sobre columnas creadas con alguna de las siguientes caractersticas:

Con tipo de dato timestamp

Con la propiedad IDENTITY o ROWGUIDCOL

http://www.sqlmax.com/centro/moduloII_3.asp?MX= (2 de 7)20/11/2007 04:05:11 a.m.


SQL SERVER Manual en Linea - Modulo 2/3

Con una definicin por defecto existente o con un objeto por defecto.

El valor por defecto debe ser compatible con el tipo de dato definido para la columna. Por ejemplo para una columna con
un tipo de dato entero (int) el valor por defecto deber ser un nmero entero y no una cadena de caracteres.

Cuando una definicin DEFAULT es agregada a una columna existente en una tabla, SQL Server (por defecto) aplica el
valor por defecto solo a las filas nuevas que sean ingresadas de ah en adelante. Las filas que tomaron el valor por
defecto anterior no son afectadas. Cuando se agrega una nueva columna a una tabla existente, sin embargo, se puede
especificar al SQL Server que inserte el valor por defecto (especificado en la definicin de la nueva columna) en vez de
un valor nulo en la nueva columna para las filas preexistentes de la tabla.

Auto numeracin y columnas de identificacin

Para cada tabla, se puede crear una sola columna de identificacin conteniendo los valores secuenciales generados por
el sistema que unvocamente identifican cada fila en la tabla. Por ejemplo, una columna de identificacin podra generar
automticamente un nmero nico de recibo de compra a medida que las filas son insertadas en la tabla.

Las columnas de identificacin contienen valores nicos dentro de la tabla en la cual ellas son definidas. En otras
palabras, otras tablas que contienen columnas de identificacin pueden contener los mismos valores de identificacin
que los usados por otras tablas. Sin embargo, esta situacin generalmente no es un problema, porque los valores de
identificacin son tpicamente usados solamente dentro del contexto de una sola tabla, y las columnas de identificacin
no se relacionan a otra columna de identificacin de otra tabla.

Puede ser creada una columna de identificacin globalmente nica para cada tabla que deba contener valores que son
nicos para todas las redes de computadoras del mundo. A menudo, se utiliza una columna que garantice contener
valores globalmente nicos cuando datos similares pueden ser generados desde mltiples sistemas de base de datos.
(por ejemplo en un sistema de facturacin a clientes con datos ubicados en varias subsidiarias distribuidas por el
mundo). Cuando el dato es tomado en el sitio central para consolidacin y para la generacin de reportes, el utilizar
datos globalmente nicos permite a los clientes en diferentes pases evitar tener los mismos nmeros de factura o de
identificacin de cliente. SQL Server utiliza internamente columnas de identificacin nicas globalmente en procesos de
replicacin, asegurando que las filas son identificadas de forma unvoca a travs de las mltiples copias de la tabla.

Crear columnas de identificacin

Solamente una columna de identificacin y una columna de identificacin globalmente nica pueden crearse por cada
tabla

Propiedad IDENTITY

Las columnas de identificacin pueden ser implementadas usando la propiedad IDENTITY, la cual especifica el primer
nmero de identificacin a ser usado en la primera fila que se ingrese y un incremento (propiedad Identity Increment)
que se agregar al ltimo usado para generar un nuevo nmero de identificacin para una fila cualquiera que sea
agregada. Cuando se insertan valores en una tabla con una columna de identificacin, SQL Server automticamente
genera el prximo nmero de identificacin adicionando el incremento al ltimo generado.

Cuando se usa la propiedad IDENTITY para definir una columna de identificacin, se debe considerar lo siguiente:

Una tabla puede tener solamente una columna con la propiedad IDENTITY property, y la columna debe ser
definida utilizando los tipos de datos int, numeric, smallint, bigint, o tynint.

Se pueden especificar el nmero inicial y el incremento de la secuencia, siendo ambos por defecto iguales a
uno.

La columna de identificacin no debe permitir valores nulos y no debe contener una definicin u objeto por
defecto.

La columna puede ser referenciada en una lista de seleccin utilizando la palabra clave IDENTIFYCOL despus
que la propiedad IDENTITY ha sido configurada.

La funcin OBJECTPROPERTY puede ser usada para determinar si una tabla tiene una columna IDENTITY, y la
funcin COLUMNPROPERTY puede ser usada para determinar el nombre de la columna IDENTITY.

El siguiente ejemplo utiliza el comando CREATE TABLE para crear la tabla Empleados. Ninguna columna acepta valores
nulos. Adems, la columna Emp_ID es una columna de identificacin. El valor inicial es 101, y el incremento 1.

http://www.sqlmax.com/centro/moduloII_3.asp?MX= (3 de 7)20/11/2007 04:05:11 a.m.


SQL SERVER Manual en Linea - Modulo 2/3

CREATE TABLE Empleados


(
Emp_ID SMALLINT IDENTITY(101,1) NOT NUL,
EmpNombre varchar(50) NOT NULL,
)

Si existe una columna de identificacin en una tabla sobre la que se realizan frecuentes operaciones de borrado de filas,
se puede generar huecos en la secuencia de valores de la columna. Los valores eliminados de las columnas de
identificacin no ser reutilizados. Si se quieren evitar tales huecos no se debera utilizar la propiedad IDENTITY, en
cambio, se puede crear un desencadenador que determine un nuevo valor de identificacin (basado en los valores que
ya existen en la columna de identificacin) para cada nueva fila.

Identificadores globalmente nicos

Aunque la propiedad IDENTITY automatiza la numeracin de las filas dentro de una tabla; tablas separadas, sin
embargo, cada una con su propia columna de identificacin, pueden generar los mismos valores para sus columnas de
identificacin. La propiedad IDENTITY garantiza valores no repetidos solo para la tabla que la contiene. Si una aplicacin
debe generar una columna de identificacin que genere valores nicos para toda una base de datos o para todas las
bases de datos en todo el mundo, se deber utilizar la propiedad ROWGUIDCOL, el tipo de dato uniqueidentifier y la
funcin NEWID.

Cuando se utiliza la propiedad ROWGUIDCOL para definir un identificador globalmente nico se deber tener en cuenta
lo siguiente:

Una tabla puede tener una sola columna ROWGUIDCOL, y esta columna debe ser definida con el tipo de dato
uniqueidentifier.

SQL Server no genera valores automticamente para esta columna. Para insertar un valor globalmente nico,
se deber crear una definicin DEFAULT sobre la columna que utilice la funcin NEWID.

La columna puede ser referenciada en una lista de seleccin con la palabra clave ROWGUIDCOL despus que
la propiedad ROWGUIDCOL fue configurada. Este funcionamiento es similar al modo en que se puede referenciar
una columna IDENTITY utilizando la palabra IDENTITYCOL.

Dado que la propiedad ROWGUIDCOL no asegura unicidad, el comando UNIQUE debera ser usado para
determinar que sern insertados valores nicos en la columna con la propiedad ROWGUIDCOL.

El siguiente ejemplo utiliza el comando CREATE TABLE para crear la tabla Empleados. La columna Emp_ID
automticamente generar un valor globalmente nico cuando se inserte una nueva fila.

CREATE TABLE
(
Emp_ID uniqueidentifier DEFAULT NEWID() NOT NULL,
EmpNombre varchar(609 NOT NULL
)

Mtodos para crear tablas

SQL Server provee varios mtodos para crear tablas: el comando Transact_SQL CREATE TABLE, el rbol de la consola
del SQL Server Enterprise Manager, y el Database Designer (al cual se puede acceder a travs del SQL Server Enterprise
manager).

Comando CREATE TABLE

Se puede utilizar el comando CREATE TABLE para crear una tabla dentro de una base de datos SQL Server, Cuando se
utiliza este comando, se debe definir, como mnimo, el nombre de la tabla, las columnas y el tipo de datos (y si
corresponde sus valores).

El siguiente ejemplo muestra como crear una tabla SQL:

CREATE TABLE Clientes


(
Cliente_ID char(4),
ClienteNombre varchar(40),
)

http://www.sqlmax.com/centro/moduloII_3.asp?MX= (4 de 7)20/11/2007 04:05:11 a.m.


SQL SERVER Manual en Linea - Modulo 2/3

Adems de los elementos bsicos de la tabla (nombre, columnas y tipos de datos), el comando CREATE TABLE tambin
permite definir otra propiedades. Por ejemplo, se puede especificar el grupo de archivos sobre el que se almacenar la
tabla, o se pueden definir restricciones que se aplique a columnas individuales o a toda la tabla.

Enterprise Manager

Se pueden crear tablas directamente en el SQL Server Enterprise Manager. Para crear una tabla en una base de datos
existente, expanda el rbol de la consola hasta que la base de datos aparezca, clic derecho sobre el nodo Tables, y clic
sobre New Table (Nueva Tabla). Cuando la ventana New Table se abra, complete la informacin necesaria para definir la
tabla como se muestra en la Figura.

Figura 1: La ventana New Table en el SQL Enterprise Manager

Database Designer (Diseador de base de datos)

Se puede utilizar el Database Designer en el SQL Server Enterprise Manager para agregar una tabla a un diagrama de
base de datos, editar su estructura, o relacionarla a otras tablas en el diagrama. Se puede tanto insertar tablas
existentes de la base de datos al diagrama como insertar una nueva tabla a la base de datos y al diagrama. Adems,
desde el Table Designer se pueden modificar tablas existentes. Table Designer es una herramienta visual que permite
disear y ver una tabla en una base de datos a la que uno debe estar conectado.

Administrar tablas de una base de datos SQL Server

Una vez que se ha creado una tabla en una base de datos SQL Server, se puede consultar informacin sobre la tabla,
modificar sus caractersticas, o eliminar la tabla de la dbase de datos.

Consultar informacin sobre tablas

Despus que ha creado las tablas de una base de datos, Ud. podra necesitar encontrar informacin acerca de las
propiedades de una tabla (por ejemplo, el nombre o el tipo de dato de una columna, la naturaleza de sus ndices, etc.)
Se puede tambin mostrar las dependencias de la tabla, determinando que objetos (tales como vistas, procedimientos
almacenados, y desencadenadores) tiene dependencia con la tabla. Advierta que si se realizan modificaciones sobre la
tabla, los objetos dependientes pueden ser afectados.

SQL Server incluye varios mtodos para ver las caractersticas de una tabla y de sus dependencias.

Para ver la definicin de un tabla, utilice el procedimiento almacenado provisto por el sistema sp_help o el
SQL Server Enterprise Manager para ver las propiedades de una tabla.

Para ver las dependencias de una tabla, utilice el procedimiento almacenado sp_depends o le opcin Display

http://www.sqlmax.com/centro/moduloII_3.asp?MX= (5 de 7)20/11/2007 04:05:11 a.m.


SQL SERVER Manual en Linea - Modulo 2/3

Dependencies en el SQL Server enterprise Manager.

Para ver propiedades de las columnas, utilice el comando COLUMNPROPERTY para retornar informacin
acerca de una columna o un parmetro de procedimiento.

Modificar tablas de una base de datos SQL Server

Despus que se crea una tabla se pueden cambiar muchas opciones que fueron definidas para la tabla cuando esta fue
originalmente creada, incluyendo las siguientes:

Pueden ser agregadas, modificadas o eliminadas columnas. Por ejemplo, el nombre de la columna, longitud, tipo de
dato, precisin, escala, y anulabilidad pueden ser modificadas, aunque con algunas restricciones.

Pueden ser agregadas o modificadas las restricciones PRIMARY KEY y FOREIGN KEY

Pueden ser agregadas o modificadas las restricciones UNIQUE y CHECK y la definicin DEFAULT (y objetos).

Se puede agregar o borrar una columna de identificacin usando las propiedades IDENTITY o ROWGUIDCOL.
La propiedad ROWGUIDCOL puede ser agregada o removida de una columna existente, aunque slo una columna
en la tabla puede tener la propiedad ROWGUIDCOL al mismo tiempo.

Una tabla y las columnas seleccionadas dentro de la tabla pueden ser registradas para una indexacin a texto
completo(full-text indexing)

Se puede, tambin, cambiar el nombre y el dueo (owner) de una tabla. Cuando se ejecuta esta operacin, se debe
cambiar el nombre de tabla en todos los desencadenadores, procedimientos almacenados, Transact-SQL scripts, o
cualquier otro cdigo de programacin que use el nombre o el dueo anterior de la tabla.

El siguiente cuadro provee una lista de varios tipos de modifcaciones que se pueden hacer sobre las propiedades de las
tablas. El cuadro muestra, adems, la lista de los mtodos a utilizar a tal efecto.

Tipo de Modificacin Mtodo de Modificacin

El procedimiento almacenado de sistema sp_rename. La opcin Rename en


Renombrar una tabla
el SQL Server Enterprise Manager
Cambiar el dueo de una tabla El procedimiento almacenado de sistema sp_changeobjectowner
Modificar las propiedades de las El comando ALTER DATABASE La opcin Design Table en el SQL Server
columnas Enterprise Manager
El procedimiento almacenado de sistema sp_rename La opcin Design Table
Renombrar una columna
en el SQL Server Enterprise Manager

Borrar tablas de una base de datos SQL Server

A veces, se necesita borrar una tabla (por ejemplo, cuando se quiere implementar un nuevo diseo o liberar espacio en
una base de datos). Cuando se elimina una tabla, la definicin de su estructura, los ndices a texto completo, las
restricciones y los ndices son borrados de manera permanente, y el espacio que ocupaban es liberado para otros
objetos. Se puede explcitamente borrar una tabla temporaria si no se quiere esperar a que sea eliminada en forma
automtica.

Si se necesita eliminar tablas que se encuentran relacionadas a travs de FOREIGN KEY y de las restricciones UNIQUE o
PRIMARY KEY, se deben eliminar primero las tablas con la restriccin FOREIGN KEY primero. Si se necesita eliminar una
tabla que tiene la restriccin FOREIGN KEY pero no se quiere eliminar la tabla con la clave ajena, primero se deber
eliminar la restriccin FOREIGN KEY.

Para eliminar una tabla de una base de datos SQL Server se utiliza el comando DROP TABLE o el Enterprise Manager
removiendo la tabla del nodo Tables.

http://www.sqlmax.com/centro/moduloII_3.asp?MX= (6 de 7)20/11/2007 04:05:11 a.m.


SQL SERVER Manual en Linea - Modulo 2/3

< Tema 2 Tema 4 >

http://www.sqlmax.com/centro/moduloII_3.asp?MX= (7 de 7)20/11/2007 04:05:11 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO II: Implementar una base de datos y sus tablas

Tema 4: Implementar la integridad de los datos

Introduccin a la integridad de los datos

Las tablas en una base de datos SQL Server pueden incluir diferentes tipos de propiedades para asegurar la integridad
de los datos. Estas propiedades incluyen: tipos de dato, definiciones NOT NULL, definiciones DEFAULT, propiedades
IDENTITY, restricciones, reglas, desencadenadores e ndices. A continuacin se presenta una introduccin de todos estos
tipos de integridad de datos soportados por SQL Server. Adems, se discutirn los diferentes tipos de integridad de
datos, incluyendo integridad de entidad, integridad de dominio, integridad referencial e integridad definida por el usuario.

Asegurar la integridad de los datos

Asegurar la integridad de los datos garantiza la calidad de los datos. Por ejemplo, suponga que Ud. crea la tabla Clientes
en su base de datos. Los valores en la columna Cliente_ID deberan identificar unvocamente a cada cliente que es
ingresado a la tabla. Como resultado, si un cliente tiene un Cliente_ID de 438, ningn otro cliente debera tener el valor
Cliente_ID en 438. Luego, suponga que se ha creado una columna Cliente_Eval que es utilizada para evaluar a cada
cliente con una calificacin de 1 a 8. En este caso, la columna Cliente_Eval no deber aceptar un valor de 9 o cualquier
otro valor que no est entre 1 y 8. En ambos casos, se deben usar mtodos soportados por SQL Server para asegurar la
integridad de los datos.

SQL Server soporta varios mtodos para asegurar la integridad de los datos, que incluyen: tipos de dato, definiciones
NOT NULL, definiciones DEFAULT, propiedades IDENTITY, restricciones, reglas, desencadenadores e ndices. Ya se han
visto algunos de estos mtodos. Un breve resumen de ellos es incluido aqu a fin de mostrar una visin comprehensiva
de los distintos modos de asegurar la integridad de los datos. Algunas de esta propiedades de la tablas, tales como las
definiciones NOT NULL y DEFAULT, son a veces consideradas tipos de restricciones. Para los propsitos de este Kit, sin
embargo, son tratadas de forma separada.

Tipos de Dato

Un tipo de dato es un atributo que especifica el tipo de dato (carcter, entero, binario, etc.) que puede ser almacenado
en una columna, parmetro o variable. SQL Server provee de un conjunto de tipos de dato, an cuando se pueden crear
tipos de dato definidos por el usuario que se crean sobre la base de tipos de dato provisto por el SQL Server. Los tipos
de dato provistos por el sistema definen todos los tipos de dato que se pueden usar en SQL Server. Los tipos de dato
pueden ser utilizados para asegurar la integridad de los datos porque los datos ingresados o modificados deben cumplir
con el tipo de dato especificado para el objeto correspondiente. Por ejemplo, no se puede almacenar el nombre de
alguien en una columna con un tipo de dato datetime, ya que esta columna solo aceptar valores vlidos de fecha y hora.

Definiciones NOT NULL

La anulabilidad de una columna determina si las filas en la tabla pueden contener valores nulos para esa columna. Un
valor nulo no es lo mismo que un cero, un blanco o una cadena de caracteres de longitud cero. Un valor nulo significa
que no se ha ingresado ningn valor para esa columna o que el valor es desconocido o indefinido. La anulabilidad de una
columna se define cuando se crea o se modifica una tabla. Si se usan columnas que permiten o no valores nulos, se
debera usar siempre las clusula NULL y NOT NULL dada la complejidad que tiene el SQL Server para manejar los
valores nulos y no prestarse a confusin. La clusula NULL se usa si se permiten valores nulos en la columna y la
clusula NOT NULL si no.

Definiciones DEFAULT

Los valores por defecto indican que valor ser guardado en una columna si no se especifica un valor para la columna
cuando se inserta una fila. Las definiciones DEFAULT pueden ser creadas cuando la tabla es creada (como parte de la
definicin de la tabla) o pueden ser agregadas a una tabla existente. Cada columna en una tabla puede contener una
sola definicin DEFAULT.

Propiedades IDENTITY

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (1 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

Cada tabla puede tener slo una columna de identificacin, la que contendr una secuencia de valores generados por el
sistema que unvocamente identifican a cada fila de la tabla. Las columnas de identificacin contienen valores nicos
dentro de la tabla para la cual son definidas, no as con relacin a otras tablas que pueden contener esos valores en sus
propias columnas de identificacin. Esta situacin no es generalmente un problema, pero en los casos que as lo sea (por
ejemplo cuando diferentes tablas referidas a una misma entidad conceptual, como ser clientes, son cargadas en
diferentes servidores distribuidos en el mundo y existe la posibilidad que en algn momento para generar reporte o
consolidacin de informacin sean unidas) se pueden utilizar columnas ROWGUIDCOL como se vio anteriormente.

Restricciones (constraints)

Las restricciones permiten definir el modo en que SQL Server automticamente fuerza la integridad de la base de datos.
Las restricciones definen reglas indicando los valores permitidos en las columnas y son el mecanismo estndar para
asegurar integridad. Usar restricciones es preferible a usar desencadenadores, reglas o valores por defecto. El query
optimizer (optimizador de consultas) de SQL Server utiliza definiciones de restricciones para construir planes de
ejecucin de consultas de alto rendimiento.

Reglas (rules)

Las reglas son capacidades mantenidas por compatibilidad con versiones anteriores de SQL Server, que realizan algunas
de las mismas funcionalidades que las restricciones CHECK. Las restricciones CHECK son el modo preferido y estndar
de restringir valores para una columna. Las restricciones CHECK, por otro lado, son mas concisas que las reglas; se
puede aplicar solo una regla por columna mientras que se pueden aplicar mltiples restricciones CHECK. Las
restricciones CHECK son especificadas como parte del comando CREATE TABLE, mientras que las reglas son creadas
como objetos separados y luego vinculadas a la columna.

Se utiliza el comando CREATE RULE para crear una regla, y luego se debe utilizar el procedimiento almacenado
sp_bindrule para vincular la regla a una columna o a un tipo de dato definido por el usuario.

Desencadenadores

Los desencadenadores son una clase especial de procedimientos almacenados que son definidos para ser ejecutados
automticamente cuando es ejecutado un comando UPDATE, INSERT o DELETE sobre una tabla o una vista. Los
desencadenadores son poderosas herramientas que pueden ser utilizados para aplicar las reglas de negocio de manera
automtica en el momento en que los datos son modificados. Los desencadenadores pueden comprender el control
lgico que realizan loas restricciones, valores por defecto, y reglas de SQL Server (an cuando es recomendable usar
restricciones y valores por defecto antes que desencadenadores en la medida que respondan a todas las necesidades de
control de integridad de datos).

Indices

Un ndice es una estructura que ordena los datos de una o ms columnas en una tabla de base de datos. Un ndice
provee de punteros a los valores de los datos almacenados en columnas especificadas de una tabla y luego ordena esos
punteros de acuerdo al orden que se especifique. Las bases de datos utilizan los ndices del mismos modo que se utilizan
los ndices de un libro: se busca en el ndice para encontrar un determinado valor y luego se sigue un puntero a la fila
que contiene ese valor. Un ndice con clave nica asegura la unicidad en la columna.

Tipos de integridad de datos

SQL Server soporta cuatro tipos de integridad de datos: integridad de entidad, integridad de dominio, integridad
referencial e integridad definida por el usuario.

Integridad de entidad

La integridad de entidad define una fila como una nica instancia de una entidad para una tabla en particular. La
integridad de entidad asegura la integridad de la columna de identificacin o la clave primaria de una tabla ( a travs de
ndices, estricciones UNIQUE, restricciones PRIMARY KEY, o propiedades IDENTITY).

Integridad de dominio

La integridad de dominio es la validacin de las entradas en una determinada columna. Se puede asegurar la integridad
de dominio restringiendo el tipo (a travs de tipos de datos), el formato (a travs de las restricciones CHECK y de las
reglas), o el rango de valores posibles ( a travs de restricciones FOREIGN KEY, restricciones CHECK, definiciones
DEFAULT, definiciones NOT NULL, y reglas)

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (2 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

Integridad referencial

La integridad referencial preserva las relaciones definidas entre tablas, cuando se entran, modifican o borran registros.
En SQL Server, la integridad referencial esta basada en interrelaciones entre claves ajenas y claves primarias o entre
claves ajenas y claves nicas (a travs de la restricciones FOREIGN KEY y CHECK). La integridad referencial asegura
que los valores de las claves son consistentes a travs de distintas tablas. Tal consistencia requiere que no existan
referencia a valores inexistentes y que, si un valor clave cambia, todas las referencias cambien consistentemente a lo
largo de la base de datos.

Cuando se fuerza la integridad referencial, SQL Server previene a los usuarios de realizar lo siguiente:

Agregar registros a una tabla relacionada si no hay registros asociados en la correspondiente tabla primaria.

Cambiar valores en la tabla primaria que resulten en registros hurfanos en las tablas relacionadas.

Borrar registros desde una tabla primaria si existen registros relacionados en la tabla ajena.

Por ejemplo, con las tablas Ventas y Ttulos en la base de datos Pubs, la integridad referencial est basada sobre las
relaciones entre la clave ajena (tit_ID) en la tabla ventas y la clave primaria (tit_ID) en la tabla Titulos, como se
muestra en la Figura.

Figura 1: Integridad referencial entre la tabla Ventas y la tabla Titulos

Integridad definida por el usuario

La integridad definida por el usuario permite definir reglas de negocios especficas que no caigan dentro de alguna de las
categoras anteriores. Todas las categoras soportan integridad definida por el usuario (todas las restricciones a nivel
columna y a nivel tabla en el comando CREATE TABLE, procedimientos almacenados y desencadenadores)

Implementar restricciones de integridad

Una restriccin es una propiedad asignada a una tabla o a una columna que previene que datos invlidos sean grabados
en la o las columnas especificadas. Por ejemplo, una restriccin UNIQUE o PRIMARY KEY previene de inserciones de
valores que dupliquen un valor existente, mientras que las restricciones CHECK previenen de inserciones que no igualen
una condicin de bsqueda, y una restriccin FOREIGN KEY asegura la consistencia de la relacin entre dos tablas.

Introduccin a las restricciones de integridad

La restricciones permiten definir la forma en que SQL Server automticamente asegurar la integridad de la base de
datos. Las restricciones definen reglas en base a los valores permitidos en las columnas y son los mecanismos estndar
para asegurar la integridad. Se deberan usar restricciones en vez de desencadenadores, procedimientos almacenados,
valores por defecto o reglas.

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (3 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

Las restricciones pueden ser restricciones de columnas o de tablas:

Una restriccin de columna es especificada como parte de la definicin de la columna y se aplica solo a esta
columna.

Una restriccin de tabla es declarada independientemente de las definiciones de la columna y se puede aplicar
a mas de una columna en la tabla.

Las restricciones de tabla deben ser usadas cuando mas de una columna se incluye en la formulacin de la condicin.
Por ejemplo, si una tabla tiene dos o mas columnas en la clave primaria, se debe usar una restriccin de tabla para
incluirlas a todas en la clave primaria. Supongamos una tabla que registra eventos que suceden en una computadora de
una fbrica. Dicha tabla registra eventos de diferente tipo que pueden suceder al mismo tiempo, pero no pueden
suceder dos eventos del mismo tipo al mismo tiempo. Esta regla puede ser forzada incluyendo a ambas columnas; tipos
de eventos y tiempo, en una clave primaria de dos columnas, como se muestra en el siguiente comando CREATE TABLE:

CREATE TABLE Procesos


(
TipoEvento int,
TiempoEvento datetime,
LugarEvento char(50),
DescripEvento char(1024),
CONSTRAINT event_key PRIMARY KEY (TipoEvento, TiempoEvento)
)

SQL Server soporta cuatro clases principales de restricciones: PRIMARY KEY, UNIQUE, FOREIGN KEY y CHECK.

Restricciones PRIMARY KEY

Una tabla usualmente tiene una columna (o una combinacin de columnas) que identifica unvocamente cada fila de la
tabla. Esta columna (o columnas) son llamadas clave primaria de la tabla y aseguran la integridad de la entidad de la
tabla. Se puede crear una clave primaria usando la restriccin PRIMARY KEY cuando se crea o modifica la tabla.

Una tabla puede tener solo una restriccin PRIMARY KEY, y ninguna columna que participa de la clave primaria puede
aceptar nulos. Cuando se especifica una restriccin PRIMARY KEY para una tabla, SQL Server 2000 asegura la unicidad
de los datos creando un ndice principal para las columnas de la clave primaria. Este ndice permite, adems, un acceso
rpido a las filas cuando la clave primaria se usa para formular consultas.

Si se define la restriccin PRIMARY KEY para mas de una columna, los valores se pueden duplicar para una columna,
pero cada combinacin de valores para todas las columnas de la clave principal de una fila debe ser nica para toda la
tabla. La figura muestra como las columnas Autor_ID y Titulo_ID de la tabla TituloAutor forman una restriccin PRIMARY
KEY, la que asegura que las combinaciones Autor_ID Titulo_ID son nicas.

Figura 2: La clave primaria de la tabla TituloAutor en la base de datos pubs

Crear restricciones PRIMARY KEY

Se pueden crear restricciones PRIMARY KEY utilizando uno de los siguientes mtodos:

Crear la restriccin cuando se crea la tabla

Agregar la restriccin a una tabla ya existente, siempre que no exista otra restriccin PRIMARY KEY para esa
tabla.

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (4 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

Se puede modificar o eliminar una restriccin PRIMARY KEY despus que ha sido creada.

Por ejemplo se podra querer que la restriccin PRIMARY KEY de la tabla referencie a otras columnas, o querer cambiar
el orden de las columnas, nombre de ndice, agrupamiento o factor de llenado definido con un restriccin PRIMARY KEY.

El siguiente comando CREATE TABLE crea la tabla Tabla1 y define la columna Col1 como clave primaria:

CREATE TABLE Tabla1


(
Col1 int PRIMARY KEY,
Col2 varchar(30)
)

Se puede definir la misma restriccin utilizando la definicin a nivel de tabla:

CREATE TABLE Tabla1


(Col1 int,
Col2 varchar(30),
CONSTRAINT tabla_pk PRIMARY KEY (Col1)
)

Se puede usar el comando ALTER TABLE para agregar una restriccin PRIMARY KEY a una tabla existente:

ALTER TABLE Tabla1


ADD CONSTRAINT tabla_pk PRIMARY KEY (Col1)

Cuando una restriccin PRIMARY KEY se agrega a una columna (o columnas) existente en un tabla, SQL Server 2000
controla los datos ya existentes en las columnas para asegurar que se cumplen las siguientes reglas:

No hay valores nulos

No hay valores duplicados

Si se agrega una restriccin PRIMARY KEY a una columna que tiene valores nulos o duplicados, SQL Server emite un
mensaje de error y no agrega la restriccin.

SQL Server automticamente crea un ndice nico para asegurar la unicidad de los valores de la restriccin PRIMARY
KEY. Si no existe un ndice agrupado ( o no se especifica un ndice no-agrupado) se crea un ndice nico y no agrupado
para asegurar la restriccin PRIMARY KEY (ver ndices mas adelante en este mdulo).

Restricciones UNIQUE

Se pueden usar las restricciones UNIQUE para asegurar que no sean entrados valores duplicados en columnas
especficas que no participan de la clave primaria. Aunque tanto la restriccin PRIMARY KEY como la restriccin UNIQUE
aseguran unicidad, se debera usar UNIQUE en vez de PRIMARY KEY en los siguientes casos:

Si una columna ( o combinacin de columnas) no son la clave primaria. Se pueden definir muchas
restricciones UNIQUE para una tabla, muientras que solo una restriccin PRIMARY KEY,

Si la columna permite valores nulos. Las restricciones UNIQUE permiten que se las defina para aceptar
valores nulos, mientra que las restricciones PRIMARY KEY no lo permiten.

Una restriccin UNIQUE pueden ser referenciadas por una restriccin FOREIGN KEY.

Crear restricciones UNIQUE

Se pueden crear restricciones UNIQUE en el mismo modo que se crean restricciones PRIMARY KEY:

Creando la restriccin al momento de crear la tabla ( como parte de la definicin de la tabla)

Agregando la restriccin a una tabla existente, previendo que la o las columnas comprendidas en la
restriccin UNIQUE contengan solo valores no duplicados o valores nulos. Una tabla puede aceptar mltiples

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (5 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

restricciones UNIQUE.

Se pueden usar los mismos comandos Transact-SQL para crear restricciones UNIQUE que los utilizados para crear
restricciones PRIMARY KEY. Simplemente reemplace las palabras PRIMARY KEY por UNIQUE. Al igual que con las
restricciones PRIMARY KEY las restricciones UNIQUE pueden ser modificadas o eliminadas una vez creadas.

Cuando se agrega una restriccin UNIQUE a una columna (o columnas) existente en la tabla, SQL Server (por defecto)
controla los datos existentes en las columnas para asegurar que todos los valores, excepto los nulos, son nicos. Si se
agrega una restriccin UNIQUE a una columna que tienen valores no nulos duplicados, SQL Server genera un mensaje
de error y no agrega la restriccin.

SQL Server automticamente crea un ndice UNIQUE para asegurar la unicidad requerida por la restriccin UNIQUE. Por
lo que, si se intenta ingresar un nueva fila con valores duplicados para la columna (o combinacin de columnas)
especificada se genera una mensaje de error diciendo que ha sido violada la restriccin UNIQUE y no se agrega la fila a
tabla. Si no se especifica un ndice agrupado, se crear un ndice no-agrupado por defecto cuando se crea una restriccin
UNIQUE.

Restricciones FOREIGN KEY

Una clave ajena es una columna o combinacin de columnas usadas para establecer y asegurar una conexin entre dos
tablas. Al agregar una columna (o columnas) a una de las tablas y definir estas columnas con una restriccin FOREIGN
KEY se crea una conexin entre dos tablas. Las columnas tendrn nicamente valores que se encuentren en las
columnas de la clave primaria de la segunda tabla.

Una tabla puede tener mltiples restricciones FOREIGN KEY.

Por ejemplo, la tabla Titulos en la base de datos Pubs tiene una conexin a la tabla Editores al haber una relacin lgica
entre autores y editores.

La columna Pub_ID en la tabla Titulos concuerda con la columna de clave principal en la tabla Editores, como muestra la
Figura. La columna Pub_ID en la tabla Titulos es la clave ajena asociada la tabla Editores.

Se puede crear una clave ajena definiendo una restriccin FOREIGN KEY cuando se crea o modifica una tabla. Adems
de a una PRIMARY KEY, una clave ajena puede referenciar a una restriccin UNIQUE en otra tabla.

Una restriccin FOREIGN KEY puede contener valores nulos; sin embargo, si cualquier columna de una restriccin
FOREIGN KEY compuesta contiene valores nulos, la verificacin de la restriccin FOREIGN KEY ser omitida.

Una restriccin FOREIGN KEY puede referenciar columnas en tablas de la misma base de datos o dentro de la misma
tablas (tablas auto-referenciadas).

Figura 3: AUna restriccin FOREIGN KEY definida en la tabla Titulos de la base datos Pubs.

An cuando el propsito primario de una restriccin FOREIGN KEY en es el de controlar que datos pueden ser guardados
en la tabla de la clave ajena, tambin controla cambios a datos en la tabla de la clave primaria. Por ejemplo, si se
elimina la fila de un editor de la tabla de editores y el ID de ese editor esta siendo utilizado en alguna fila de la tabla

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (6 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

Titulos, la integridad entre las dos tablas se destruira. Los libros del editor eliminado quedaran hurfanos, sin una
conexin a los datos de la tabla Editores. Una restriccin FOREIGN KEY previene esta situacin. La restriccin fuerza la
integridad referencial al asegurar que no se puedan hacer cambios en los datos en la tabla de la clave primaria si esos
cambios invalidan la conexin a los datos de la tabla de la clave ajena. Si se trata de eliminar una fila en la tabla de
clave primaria o de cambiar un valor de clave primaria, dicha accin no se ejecutar si el valor de clave primaria
cambiado o eliminado corresponde a un valor en la restriccin FOREIGN KEY de otra tabla.

Para cambiar o eliminar una fila en una restriccin FOREIGN KEY, se debe primero o bien eliminar los datos
correspondientes en la tabla de clave ajena o cambiar los datos de clave ajena en la tabla de clave ajena, a travs de
conectar la clave ajena a distinto valor de la clave principal.

Crear restricciones FOREIGN KEY

Se pueden crear restricciones FOEREIGN KEY utilizando alguno de los siguientes mtodos:

Creando la restriccin cuando se crea la tabla (como parte de la definicin de la tabla).

Agregando la restriccin a una tabla existente, indicando que la restriccin FOREING KEY esta conectada a
una restriccin PRIMARY KEY existente o a una restriccin UNIQUE.

Se puede modificar o eliminar una restriccin FOREIGN KEY una vez que esta ha sido creada.

Por ejemplo, se podra querer que la tabla de clave ajena referencie a otras columnas. No se puede cambiar la longitud
de una columna definida con un restriccin FOREIGN KEY.

Para modificar una restriccin FOREIGN KEY utilizando Transact-SQL, se debe primero eliminar la restriccin FOREIGN
KEY anterior y luego recrearla con su nueva definicin.

El siguiente comando CREATE TABLE crea la tabla Tabla1 y define la columna Col2 con una restriccin FOREIGN KEY que
apunta a la columna Empleado_ID que es clave primaria de la tabla Empleados.

CREATE TABLE Tabla1


(Col1 int PRIMARY KEY,
Col2 int REFERENCES Empleados(Empleado_ID)
)

Se puede definir, adems la misma restriccin usando la restriccin FOREIGN KEY a nivel de tabla:

CREATE TABLE Tabla1


(
Col1 int PRIMARY KEY,
Col2 int,
CONSTRAIT col2_fk FOREIGN KEY (Col2)
REFERENCES Empleados(Empleado_ID)
)

Se puede usar el comando ALTER TABLE para agregar una restriccin FOREIGN KEY a una tabla existente:

ALTER TABLE Tabla1


ADD CONSTRAIT col2_fk FOREIGN KEY (Col2)
REFERENCES Empleados(Empleado_ID)

Cuando se agrega una restriccin FOEREING KEY a una columna (o columnas) existentes en un tabla, SQL Server 2000
(por defecto) controla los datos existentes en las columnas para asegurar que todos los valores, excepto los nulos,
existen en las columnas referenciadas por las restricciones PRIMARY KEY o UNIQUE. Se puede configurar al SQL Server
para que no realice este control y obligarlo a agregar la nueva restriccin sin fijarse en los datos previos, esto puede ser
til cuando se quiere que la restriccin funcione solo de aqu en adelante.

De todos modos, se deber ser cuidadoso cuando se agregan restricciones sin controlar la consistencia de los datos
previos dado que se pueden provocar inconsistencias no deseadas.

Deshabilitar restricciones FOREIGN KEY

Se pueden deshabilitar restricciones FOREIGN KEY preexistentes cuando se realicen alguna de las siguientes acciones:

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (7 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

Al ejecutar los comandos INSERT y UPDATE: Deshabilite una restriccin FOREIGN KEY durante un comando
INSERT o UPDATE si el dato nuevo violar la restriccin o si la restriccin se debe aplicar solo a datos ya
existentes en la tabla. Deshabilitar restricciones permite que los datos sean modificados sin que sean validados
por las restricciones.

Al implementar procesos de replicacin: Deshabilite una restriccin FOREIGN KEY durante el proceso de
replicacin si la restriccin es especfica de la base de datos fuente. Cuando se replica una tabla, los datos y la
definicin de la tabla son copiados desde una base de datos fuente a una base de datos destino. Estas bases de
datos estn generalmente (pero no necesariamente) sobre servidores separados. Si las restricciones FOREIGN
KEY especficas de la base de datos fuente no estn deshabilitadas, estas podran innecesariamente prevenir que
nuevos datos sean ingresados en la base de datos destino.

Restricciones CHECK

Las restricciones CHECK aseguran la integridad de dominio al limitar los valores que son aceptados para una columna.
Son similares a lar restricciones FOREIGN KEY en que ambas controlan los valores que son puestos en una columna. La
diferencia est en cmo se determina cuales son valores vlidos. Las restricciones FOREIGN KEY toman los valores
vlidos de otra tabla, mientras que las restricciones CHECK determinan los valores vlidos evaluando una expresin
lgica que no se basa en datos de otra columna. Por ejemplo, es posible limitar el rango de valores para una columna
Salario creando una restriccin CHECK que permita solamente datos dentro del rango de $15.000 a $100.000. Este
capacidad evita el ingreso de salarios fuera del rango normal de salarios de la compaa.

Se puede crear una restriccin CHECK con una expresin lgica (Booleana) que retorne TRUE (verdadero) o FALSE
(falso) basada en operadores lgicos. Para permitir solamente datos que se encuentren dentro del rango de $15.000 a
$100.000, la expresin lgica ser como la siguiente:

Salario >= 15000 AND Salario <= 100000

Se puede aplicar mltiples restricciones CHECK para una sola columna. Las restricciones son evaluadas en el orden en
que han sido creadas. Adems, se puede aplicar una misma restriccin CHECK a mltiples columnas creando la
restriccin a nivel de tabla. Por ejemplo, se puede usar una restriccin CHECK para mltiples columnas para confirmar
que cualquier fila con la columna Pas igual a USA tenga valor para la columna Estado que sea una cadena de dos
caracteres. Esta posibilidad permite que mltiples condiciones sean controladas en un lugar.

Crear restricciones CHECK

Se pueden crear restricciones usando uno de los siguientes mtodos:

Creando la restriccin cuando se crea la tabla (como parte de las definiciones de la tabla)

Agregando la restriccin a una tabla existente.

Se puede modificar o eliminar una restriccin CHECK una vez que ha sido creada. Por ejemplo, se puede modificar la
expresin usada por la restriccin CHECK sobre una columna en la tabla.

Para modificar una restriccin CHECK primero se debe eliminar la antigua restriccin y luego recrearla con su nueva
definicin.

El siguiente comando CREATE TABLE crea una tabla Tabla1 y define la columna Col2 con un restriccin CHECK que limita
los valores que puede tomar la columna al rango comprendido entre 0 y 100.

CREATE TABLE Tabla1


(
Col1 int PRIMARY KEY,
Col2 int
CONSTRAIT monto_limite CHECK (Col2 BETWEN 0 AND 100),
Col3 varchar(30)
)

Tambin se puede definir la misma restriccin usando restriccin CHECK a nivel tabla:

CREATE TABLE Tabla1


(
Col1 int PRIMARY KEY,

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (8 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/4

Col2 int ,
Col3 varchar(30),
CONSTRAIT monto_limite CHECK (Col2 BETWEN 0 AND 100)
)

Se puede utilizar el comando ALTER TABLE para agregar una retriccin CHECK a una tabla existente:

ALTER TABLE Tabla1


ADD CONSTRAIT monto_limite CHECK (Col2 BETWEN 0 AND 100)

Cuando se agrega una restriccin CHECK a una tabla existente, la restriccin CHECK puede aplicarse solo a los datos
nuevos o tambin a los datos existentes. Por defecto la restriccin CHECK se aplica a los datos existentes tanto como a
los nuevos datos.

La opcin de aplicar la restriccin a los nuevos datos solamente es til cuando las reglas de negocios requieren que la
restriccin se aplique de ahora en ms.

Por ejemplo, una vieja restriccin podra requerir cdigos postales restringidos a 5 caracteres siendo los mismos an
vlidos mientras que los nuevos cdigos que se ingresen debern tener nueve caracteres. Por lo que solo los datos
nuevos deberan ser controlados para verificar que cumplen con la restriccin.

Sin embargo, se debe ser cuidadoso cuando se agregan restricciones sin controlar los datos existentes, porque esta
accin saltea los controles de SQL Server 2000 que aseguran la integridad para los datos de la tabla.

Deshabilitar restricciones CHECK

Se pueden deshabilitar restricciones CHECK preexistentes cuando se realicen alguna de las siguientes acciones:

Al ejecutar los comandos INSERT y UPDATE: Deshabilite una restriccin CHECK durante un comando INSERT
o UPDATE si el dato nuevo violar la restriccin o si la restriccin se debe aplicar solo a datos ya existentes en la
tabla. Deshabilitar restricciones permite que los datos sean modificados sin que sean validados por las
restricciones.

Al implementar procesos de replicacin: Deshabilite una restriccin CHECK durante el proceso de replicacin si la restriccin
es especfica de la base de datos fuente. Cuando se replica una tabla, los datos y la definicin de la tabla son copiados desde
una base de datos fuente a una base de datos destino. Estas bases de datos estn generalmente (pero no necesariamente) sobre
servidores separados. Si las restricciones CHECK especficas de la base de datos fuente no estn deshabilitadas, estas podran
innecesariamente prevenir que nuevos datos sean ingresados en la base de datos destino.

< Tema 3 Tema 5 >

http://www.sqlmax.com/centro/moduloII_4.asp?MX= (9 de 9)20/11/2007 04:05:15 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO II: Implementar una base de datos y sus tablas

Tema 5: Implementar ndices

Introduccin

Los ndices son objetos de base de datos diseados para mejorar el rendimiento de las consultas. En este punto veremos
la estructura y el propsito de los ndices y sus tipos y caractersticas. Se ver como determinar cuando un ndice es
necesario y apropiado, que tipo de ndice usar y como crearlos. Una vez que se crean los ndices se deben mantener
para maximizar la performance de las consultas, para ello existen varias herramientas que asisten en la tarea de
administracin y mantenimiento de los ndices. La administracin comprende las tareas de reconstruccin, renombrado,
y eliminacin de ndices.

Arquitectura de los ndices

Los ndices estn estructurados para facilitar una respuesta rpida de conjuntos de resultados. Los dos tipos de ndices
que SQL Server soporta son agrupados y no agrupados. Los ndices son aplicados a una o ms columnas en tablas o
vistas. Tablas indexadas son soportadas por todas las ediciones de SQL Server 2000, y vistas indexadas son soportadas
por las ediciones SQL Server Entreprise y SQL Server Developer. Las caractersticas de un ndice afecta el uso de los
recursos del sistema y performance general. El Query Optimizer usar un ndice si este mejorar la performance de la
consulta.

Propsito y estructura

Un ndice en SQL Server asiste al motor de base de datos en la ubicacin de los registros, tal como un ndice en un libro
ayuda a ubicar informacin rpidamente. Sin ndices, una consulta deber buscar en todos los registros de la tabla en
orden a encontrar coincidencias. Un ndice de base de datos una o ms columnas de valores de la tabla (llamadas clave
del ndice) y punteros a los correspondientes registros de la tabla. Cuando se ejecuta una consulta usando la clave del
ndice, el Query Optimizer utilizar el ndice para ubicar los registros que cumplen con la consulta.

Un ndice es estructurado por el SQL Server Index manager como un rbol balanceado (B-tree). Un B-tree es anlogo a
un rbol invertido con la raz del rbol arriba, y los niveles hoja abajo, con niveles medios entre ambos. Cada objeto en
la estructura de rbol es un grupo de claves del ndice ordenadas llamadas pginas del ndice.

Un B-tree facilita realizar consultas rpidas y consistentes dado el cuidadoso balance del ancho y profundidad del rbol a
medida que el ndice crece. Ordenar el ndice sobre la clave del mismo tambin mejora la performance. Todas las
bsquedas comienzan en la raz del B-tree y luego se mueven a travs del rbol hasta el correspondiente nivel hoja. El
nmero de registros de la tabla y el tamao de la clave del ndice afectan el ancho y profundidad del rbol. El tamao de
la clave del ndice es llamado el ancho de la clave. Una tabla con muchos registros y un gran ancho de la clave crea un
profundo y amplio B-tree. Cuanto menor sea el B-tree mas rpido retornar un valor buscado.

Para un rendimiento ptimo, se crean sobre columnas que son comnmente usadas en las consultas. Por ejemplo, los
usuarios pueden consultar la tabla de Clientes en base al apellido o al ID del cliente. Por lo tanto se deberan crear dos
ndices para la tabla: un ndice por apellido y otro por ID del cliente. Para ubicar eficientemente a los registros, el Query
Optimizer usa un ndice que concuerde con la consulta. El Query Optimizer usar el ndice por el ID del cliente cuando se
ejecute la siguiente consulta:

SELECT * FROM Clientes WHERE Cliente_ID = 798

No cree ndices para todas las columnas de una tabla, porque demasiados ndices impactarn negativamente en la
performance general. La mayora de la bases de datos son dinmicas; esto es, regularmente los registros son
agregados, eliminados y modificados. Cuando una tabla que contiene un ndice es modificada, el ndice debe ser
actualizado para reflejar la modificacin. Si la actualizacin del ndice no se produjera, el ndice se volvera intil. Por lo
tanto, las inserciones, eliminaciones y modificaciones de registros disparan al Index Manager para que actualice los
ndices de la tabla. Al igual que la tablas, los ndices son estructuras que ocupan espacio en la base de datos. El espacio
que ocupa un ndice es directamente proporcional a la cantidad de registros en la tabla y al ancho de la clave del ndice.
Antes de crear un ndice se debe realizar un balance que asegure que el incremento de performance por el aumento de
las respuestas en la consultan justifica con creces la cada de rendimiento y la sobrecarga producida por la tarea de

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (1 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

mantenimiento del ndice.

Tipos de ndices

Hay dos tipos de ndices: agrupados (clustered) y no agrupados (non clustered). Ambos tipos de ndices son estructuras
tipo B-tree. Un ndice agrupado contiene los registros de la tabla a nivel hoja del B-tree. Un ndice no agrupado es una
estructura de ndice separada, independiente del ordenamiento fsico de los registros en la tabla. Si existe un ndice
agrupado en un tabla, un ndice no agrupado utilizar al ndice agrupado para la bsqueda de los registros. En la
mayora de los casos se crear antes un ndice agrupado que los ndices no agrupados sobre una tabla.

ndices agrupados

Puede haber solo un ndice agrupado por tabla o vista, dado que estos ndices ordenan fsicamente la tabla o vista segn
la clave del ndice agrupado. Este tipo de ndices es particularmente eficiente para consultas, dado que los registros de
datos completos (en pginas de datos) son guardados a nivel de hoja del B-tree. El ordenamiento y la ubicacin de los
datos en un ndice agrupado es anlogo al de un diccionario donde las palabras son ordenadas en forma alfabtica y las
definiciones aparecen junto a las palabras.

Cuando se crea una restriccin PRIMARY KEY en un tabla que no contiene un ndice agrupado, SQL Server crear uno y
utilizar la columna de clave primaria como clave para el ndice agrupado. Si ya existe un ndice agrupado SQL Server
crear un ndice no agrupado sobre la columna definida con una restriccin PRIMARY KEY. Una columna definida como la
clave primaria es un ndice muy til porque los valores de la columna estn garantizados que son nicos. ndices sobre
columnas de valores nicos son de menor tamao que los ndices sobre columnas con valores duplicados y generan
estructuras de bsqueda ms eficientes.

Una columna definida con una restriccin UNIQUE genera automticamente un ndice no agrupado.

Para forzar el tipo de ndice a ser creado para una columna o columnas, se puede especificar las clusulas CLUSTERED o
NONCLUSTERED en los comandos CREATE TABLE, ALTER TABLE o CREATE INDEX. Suponga que se crea una tabla
Personas que contiene las siguientes columnas: PersonaID, Nombre, Apellido y NumDocumento. La columna PersonID se
define con la restriccin PRIMARY KEY, la columna NumDocumento con la restriccin UNIQUE. Para hacer un ndice
agrupado para la columna NumDocumento y un ndice no agrupado para la columna PersonID, se crea la tabla usando la
siguiente sintaxis:

CREATE TABLE dbo.Personas


(
PersonID smallint PRIMARY KEY NONCLUSTERED,
Nombre varchar(39),
Apellido varchar(40),
NumDocumento char(11) UNIQUE CLUSTERED
)

Los ndices no se limitan a las restricciones. Se pueden crear ndices sobre cualquier columna o combinacin de
columnas en una tabla o vista. ndices agrupados aseguran la unicidad internamente. Por lo que, si se crea un ndice
agrupado sobre columnas con valores no nicos SQL Server crea un nico valor sobre las columnas duplicadas para
servir de clave de ordenamiento secundaria. Para evitar el trabajo adicional requerido para mantener valores nicos
sobre columnas duplicadas, generalmente se generan ndices agrupados sobre columnas con la restriccin PRIMARY KEY.

ndices no agrupados

Sobre una tabla o vista se pueden crear 250 ndice no agrupados o 249 ndices no agrupados y un ndice agrupado. Se
debe primero crear un ndice nico agrupado sobre una vista previo a crear los ndices no agrupados. Esta restriccin no
se aplica a las tablas. Un ndice no agrupado es anlogo a un ndice al final de un libro. Se puede usar el ndice del libro
para ubicar las pginas que contienen una tema del ndice del libro. La base de datos usa los ndices no agrupados para
encontrar registros segn una clave.

Si no existe un ndices agrupado para la tabla, los datos de la tabla se encontrarn desordenados fsicamente y se dice
que la tabla tendr la estructura de montn (heap). Un ndice no agrupado sobre una tabla montn contiene punteros a
las filas de la tabla. Cada entrada en las pginas de ndice contiene un identificador de fila (RID, row ID). El RID es un
puntero a una fila en un montn, y este consiste de un nmero de pgina, un nmero de archivo y un nmero de
ranura. Si existe un ndice agrupado, las pginas de un ndice no agrupado contienen las claves del ndice agrupado en
vez del RID.

Caractersticas de los ndices

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (2 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

Una serie de caractersticas se pueden definir para los ndices, adems de si son o no agrupados, siendo las mas
importantes:

Unicidad o no de los registros segn la clave del ndice.

ndices compuestos, formados por varias columnas.

Con un factor de llenado para permitir que las pginas crezcan como sea necesario.

Con un sentido de ordenamiento que especifique si ser ascendente o descendente.

Con algunas limitaciones se pueden establecer ndices sobre columnas computadas.

Unicidad

Cuando un ndice es definido como UNIQUE, la clave del ndice y sus correspondientes valores de la clave sern nicos.
Un ndice UNIQUE puede ser aplicado a cualquier columna si todos los valores de la columna son nicos. Un ndice
UNIQUE se puede definir sobre un conjunto de columnas mediante un ndice compuesto. Por ejemplo , un ndice UNIQUE
puede ser definido sobre las columnas Apellido y NumDocumento, ninguna de ambas columnas deber tener valores
nulos y las combinaciones de los valores de ambas columnas para los registros debern ser nicas.

SQL Server automticamente crea un ndice UNIQUE para una columna o columnas definidas con las restricciones
PRIMARY KEY o UNIQUE. Por lo tanto, utilice solo las restricciones para forzar unicidad en vez de aplicar la caracterstica
UNIQUE al ndice. SQL Server no permite crear un ndice UNIQUE sobre una columna que contenga valores de la clave
repetidos.

ndices compuestos

Un ndice compuesto es cualquier ndice que use mas de una columna como clave. Los ndices compuesto pueden
mejorar el rendimiento de las consultas al reducir el nmero de operaciones de entrada/salida, porque una consulta
sobre una combinacin de columnas contenidas en el ndice ser ubicada completamente en el ndice. Cuando el
resultado de una consulta se obtiene completamente desde el ndice sin tener que consultar a los registros de la tabla ,
se dice que hay un recubrimiento de ndice, esto tiene como resultado una extraccin mas rpida de los datos, ya que
solo se consultan las pginas del ndice. Esto se produce cuando todas las columnas indicadas en las clusulas SELECT y
WHERE se encuentran dentro de la clave del ndice o dentro de la clave del ndice agrupado (si este existe). Recuerde
que los valores de la clave del ndice agrupado se encuentran tambin en las pginas de los ndice no agrupados para
poder encontrar los registros en la tabla.

Suponga que se ejecuta la siguiente consulta:

SELECT Emp_ID, Apel, NivelTrabajo


FROM Empleados01
WHERE Fecha_ingreso < (GETDATE() 30)
AND NivelTrabajo >= 100
ORDER BY NivelTrabajo

Si existe un ndice agrupado sobre la columna Emp_ID y un ndice no agrupado sobre las columnas Apel, NivelTrabajo y
Fecha_Ingreso, luego habr un recubrimiento de ndice por parte del ndice no agrupado, ya que contiene todas las
columnas usadas en la consulta, por su propia clave y por tener indicados los registros a travs de la clave del ndice
agrupado.

Factor de llenado

Cuando se inserta una fila en una tabla,SQL Server debe dispones de cierto espacio para ello. Un operacin de insercin
ocurre cuando se ejecuta un comando INSERT o cuando se ejecuta un comando UPDATE para actualizar una clave de un
ndice agrupado. Si la tabla no contiene un ndice agrupado, el registro y la pgina del ndice son colocados en cualquier
espacio disponible en el montn. Si la tabla contiene un ndice agrupado, SQL Server ubica el la pgina apropiada del
ndice dentro del B-tree y luego inserta el registro en el orden correspondiente. Si la pgina del ndice se encuentra
llena, esta es dividida (mitad de la pgina permanece en la pgina original y la otra mitad se mueve a una nueva
pgina). Si la fila insertada es muy grande, podran ser necesarias divisiones adicionales. Las divisiones de pginas son
complejas e insumen recursos de manera intensiva. La divisiones de pginas mas comunes suceden en el nivel de las
pginas hoja. Para reducir la ocurrencia de las divisiones de pginas se especifica cunto se llenarn las pginas cuando
se crea el ndice. Este valor es llamado factor de llenado . Por defecto el factor de llenado vale cero, esto es que las
pginas del ndice sern llenadas cuando el ndice se crea sobre datos existente. Un factor de llenado de cero es lo
mismo que un factor de llenado de 100. Se puede definir un valor global por defecto del factor de llenado utilizando el

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (3 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

procedimiento almacenado sp_configure o asignarlo para un ndice especfico con la clusula FILLFACTOR.

Sentido de ordenamiento

Cuando se crea un ndice, este es ordenado de manera ascendente. Tanto los ndices agrupados como los no-agrupados
se ordenan, el ndice agrupado representa el sentido de ordenamiento de la tabla. Considere el siguiente comando
SELECT:

SELECT Emp_ID, Apel, NivelTrabajo


FROM Empleados01
WHERE Fecha_ingreso < (GETDATE() 30)
AND NivelTrabajo >= 100

Fjese, que no hay un sentido de ordenamiento especificado. Ya vimos que el Query Optimizer usa una ndice compuesto
para devolver un resultado para esta consulta. El ndice compuesto es un ndice no agrupado, y la primera columna es
Apel. Supongamos que cuando se cre el ndice no estableci tampoco un sentido de ordenamiento, por lo que el
resultado es mostrado en orden ascendente comenzando con la columna Apel. La clusula ORDER BY no ha sido
indicada, para ahorrar recursos. Pero el resultado aparece ordenado por el apellido. El sentido de ordenamiento depende
del incide utilizado para resolver la consulta (si no se especifica la clusula ORDER BY o si no se indica explcitamente
que ndice utilizar). Si el Query Optimizer usa un ndice agrupado para resolver la consulta, el resultado aparecer en el
orden establecido por ese ndice, el cual es equivalente a las pginas de datos de la tabla. El siguiente comando Trnsact-
SQL usa el ndice agrupado sobre la columna Emp_ID para devolver un resultado en orden ascendente.

SELECT Emp_ID, Apel, Nombre FROM Empleados01

Informacin sobre ndices

Para ver los ndice y sus propiedades se pueden utilizar procedimientos almacenados del sistema, el Object Browser en
el Query Analizer, o el Enterprise Manager. Conocer los ndices aplicados a una tabla o vista ayuda a optimizar las
consultas. Se puede analizar ndices para disear comandos SELECT que retornen los resultados de manera eficiente., o
se pueden crear nuevos ndices para mejorar las consultas. Para ver los ndices aplicados a una tabla o vista se puede
utilizar los procedimientos almacenados del sistema sp_help sp_helpindex. Los siguientes comandos Transact-SQL
muestra todos los ndices creados para la tabla Empleados01

sp_helpindex Empleados01

El resultado que se retorna del sp_helpindex incluye el nombre del ndice, el tipo de ndice, el archivo de base de datos,
y la o las columnas contenidas por el ndice.

El Object Browser del Query Analizer provee similar informacin. En el Object Browser, expanda un nodo tabla y luego
expanda el nodo Indexes. Luego, clic derecho sobre un ndice en particular y seleccione Edit para mostrar la ventana de
dilogo Edit Existing Index como se ver mas adelante.

Se pueden ver las propiedades de un ndice y acceder al cuadro de dilogo Edit Existing Index desde un plan de
ejecucin. Clic derecho sobre un ndice que aparezca en la pestaa del Execution Plan y seleccione Manage Indexes.
Hecho esto se muestra el cuadro de dilogo Manage Index. Desde aqu se puede presionar el botn Edit para mostrar el
cuadro de dilogo Edit Existing Index. El cuadro de dilogo Manage Indexes esta tambin disponible en el Enterprise
Manager. Primero ubique el nodo Tables para la base de datos en la consola del rbol. En el panel Details, clic derecho
sobre una tabla, apuntar a All Task y por ltimo clic en Manage Indexes. Se puede modificar, crear y borrar ndices
desde el cuadro de dilogo Manage Indexes, tal como veremos mas adelante.

Para ver todos los ndices asignados en una base de datos, se puede consultar la tabla del sistema sysindexes en la base
de datos. Por ejemplo, para consultar informacin sobre ndices seleccionados en la base de datos Pubs, se ejecuta el
siguiente cdigo Transact-SQL:

USE Pubs
GO
SELECT name, rows, rowcnt, keycnt from sysindexes
WHERE name NOT LIKE %sys%
ORDER BY keycnt

Indexado Full-Text

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (4 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

El indexado Full-Text no es parte de las funciones de indexado descripta hasta ahora, pero se debe entender como este
difiere del indexado provisto por el sistema SQL Server. UN ndice Full-Text permite realizar consultas a texto completo
para buscar datos en forma de cadenas de caracteres en la base de datos. Un ndice Full-Text se guarda en un catlogo
Full-Text. El motor Microsoft Search, no SQL Server, mantiene los ndices y catlogos Full-Text.

Crear y administrar ndices

Crear ndices

Hay varios modos de crear un ndice en SQL Server. Se puede crear una aplicacin propia que use la interfase SQL-DMO
para crear un ndice. Como se vio se puede usar la opcin Manage Indexes desde el Object Browser o accederlo desde
un plan de ejecucin en el Query Analizer. La opcin Manage Indexes est tambin disponible desde el men contextual
de una tabla o vista en el Enterprise Manager. El Enterprise Manager ofrece adems el asistente Create Index para crear
ndices paso a paso. Otro modo es crear un ndice para una tabla utilizando el comando Transact-SQL CREATE INDEX.
Por ltimo, se pueden especificar las propiedades de una restriccin de clave primaria o de una restriccin de clave nica
durante la creacin (CREATE TABE9 o modificacin (ALTER TABLE) de una tabla.

Usando interfase grfica

Desde el cuadro de dilogo Manage Indexes, clic el botn New para crear un ndice y se muestra el cuadro de dilogo
para acceder al cuadro de dilogo Create New Index como se muestra en la figura

Figura 1: El cuadro de dilogo Create New Index para la tabla Productos de la base de datos Northwind.

Desde el cuadro de dilogo Create New Index, se puede proveer de un nombre al ndice, el tipo de ndice (agrupado o no
agrupado), y de las propiedades del ndice (unicidad, factor de llenado, el grupo de archivos donde el ndice deber ser
creado, etc.). Se puede adems cambiar el orden de las columnas que son parte de una clave compuesta, seleccionando
la columna y con clic en los botones Up y Down. La columna que est primera en la lista de columnas seleccionadas
determinar el primer ordenamiento de la clave del ndice. Fjese que se puede especificar el orden descendiente para
cualquier parte del ndice. El Query Optimizer seleccionar el ndice Productos que aparece en la figura cuando se
ejecute el siguiente comando:

SELECT proveedorID, PrecioUnitario, NombreProducto


FROM Productos

El resultado muestra el ProveedorID en orden ascendente, seguido por el PrecioUnitario en orden descendiente. El ndice
ordena NombreProducto en orden ascendente, pero ese orden no aparece en el resultado porque ProveedorID y
PrecioUnitario prevalecen al orden de la columna NombreProducto. Se muestran a continuacin algunos registros del

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (5 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

resultado para ilustrar este tema:

ProductoID PrecioUnitario NombreProducto


1 19.0000 Chang
1 18.0000 Chai
1 10.0000 Aniseed Syrup
2 22.0000 Chef Anton's Cajun Seasoning
2 21.3500 Chef Anton's Gumbo Mix
2 21.0500 Louisiana Fiery Hot Pepper Sauce
2 17.0000 Louisiana Hot Spiced Okra
3 40.0000 Northwoods Cranberry Sauce
3 30.0000 Uncle Bob's Organic Dried Pears

Si se prefiere mas ayuda para crear ndices se puede usar el asistente Create Index en el Enterprise Manager. El
asistente Create Index est disponible en la opcin Wizards del men Tools. Haciendo clic en la opcin Wizards se
muestra el cuadro Select Dialog. En el cuadro Select Dialog, expanda Database, seleccione el asistente Create Index, y
clic en Ok para comenzar el asistente. El asistente habilita para ver los ndices ya creados sobre una tabla o vista y para
crear nuevos ndices seleccionando la columna (o columnas) que deberan ser parte del ndice, pudiendo adems
configurar las propiedades del ndice.

Usar comandos Transact-SQL

Los comandos CREATE INDEX, CREATE TABLE y ALTER TABLE participan en la creacin de los ndices. Se puede crear un
ndice usando estos comandos Transact-SQL a travs del Query Analizer o con una herramienta tal como osql.

Cuando se utiliza CREATE INDEX, se debe especificar el nombre del ndice, la tabla o la vista, y la olas columnas sobre
las que se aplicar el ndice. Opcionalmente, se puede especificar si el ndice deber contener slo valores no duplicados,
el tipo de ndice (agrupado o no), el sentido de ordenamiento para cada columna, propiedades del ndice, y el grupo de
archivos que lo contendr. La configuracin por defecto es la siguiente:

Se crean ndices no agrupados

Se ordenan todas las columnas en un sentido descendente y se usa la base de datos actual para ordenar el
ndice.

Se usan las configuraciones globales del SQL Server para fijar el factor de llenado.

Se crean todos los ordenamientos resultantes durante ela creacin del ndice en el grupo de archivos por
defecto

Actualiza estadsticas del ndice

Deshace un proceso de mltiples inserciones si la condicin de unicidad del ndice es violada por alguno de los
registros que estn siendo ingresados.

Previene de ser sobrescrito a los ndices existentes.-

Las principales clusulas en un comando CREATE INDEX son resumidas como sigue:

CREATE
[UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX
nombre_indice
ON [nombre_tabla | nombre_vista] (nombre_columna [,...n])
[WITH [propiedad_indice [,...n] ]
[ON grupo_archivos ]

Ya hemos aprendido el significado de esta clusulas, cuales son opcionales y que configuraciones por defecto existen
para cualquier clusula no especificada en el comando CREATE INDEX. Resumiendo, las clusulas UNIQUE y CLUSTERED
o NONCLUSTERED son opcionales. Es tambin opcional el especificar las propiedades del ndice a travs de la clusula
WITH y especificar el grupo de archivos donde el ndice ser creado usando la clusula ON.

El siguiente comando CREATE INDEX usa las configuraciones por defecto para todas las clusulas opcionales:

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (6 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

CREATE INDEX Indice01 ON Tabla01(Columna01)

Un ndice llamado Indice01 se crea sobre Tabla01. La clave del ndice para la tabla ser Columna01. El ndice no tiene
unicidad y no es agrupado. Todas las propiedades concuerdan con los valores por defecto de las base de datos.

El uso de clusulas opcionales personaliza el comando CREATE INDEX siguiente:

CREATE UNIQUE CLUSTERED INDEX Indice01


ON Tabla01(Columna01, Columna03, DESC)
WITH FILLFACTOR = 60
IGNORE_DUP_KEY, DROP_EXISTING,
SORT_IN_TEMPDB

Un ndice llamado Indice01 reemplazar al ndice existente del mismo nombre creado sobre la tabla Tabla01. La clusula
DROP_EXISTING indica que el ndice Indice01 debe ser reemplazado. La clave del ndice incluye a las columnas
Columna01 y Columna03, haciendo de Indice01 un ndice compuesto. La clusula DESC configura el sentido de
ordenacin para la Columna03 como descendente (en vez de ascendente). La clusula FILLFACTOR establece que las
pginas de nivel hoja del ndice estn llenas en un 40% al crearse el ndice, dejando libre un 60% del espacio para
contener entradas adicionales. Las clusulas CLUSTERED y UNIQUE configuran al ndice como agrupado y sin valores
duplicados; por lo que la tabla ser fsicamente ordenada por la clave del ndice y los valores de la clave sern nicos. La
palabra IGNORE_DUP_KEY habilita para que un proceso por lotes que contenga mltiple comandos INSERT sea exitoso
al ignorar cualquier INSERT que viole el requerimiento de unicidad.. La palabra SORT_IN_TEMDB indica al ndice que
efecte las operaciones de ordenamientos intermedios en TempDB. Esta clusula se usa tpicamente para mejorar la
velocidad a la que se crea o reconstruye un ndice grande o para disminuir la fragmentacin del ndice. Dado que una
segunda clusula ON no se ha puesto el ndice ser creado en el grupo de archivos por defecto de la base de datos.

Crear una restriccin PRIMARY KEY o UNIQUE automticamente crea un ndice. Como se vio, estas restricciones se
definen cuando se crea o modifica una tabla. Los comandos CREATE TABLE y ALTER TABLE incluyen configuraciones para
los ndices por lo que se puede personalizar a los ndices que se crean con estas restricciones.

Las principales clusulas en el comando CREATE TABLE que se relacionan con la creacin de ndices son:

CREATE TABLE nombre_tabla


( nombre_columna tipo_dato
CONSTRAINT nombre_restriccion
[PRIMARY KEY | UNIQUE]
[CLUSTERED | NONCLUSTERED]
[WITH FILLFACTOR = factor_llenado]
[ON grupo_archivo] )

una restriccin e clave primaria esta siempre configurada NOT NULL. Se puede especificar NOT NULL pero est implcita
en la definicin de la restriccin PRIMARY KEY. El siguiente comando CREATE TABLE usa configuraciones por defecto en
la definicin de una restriccin PRIMARY KEY cuando crea una tabla con restriccin de clave principal.

CREATE TABLE Tabla01 (Columna01 int


CONSTRAINT pk_columna01
PRIMARY KEY)

Una tabla llamada Tabla01 es creada con una sola columna llamada Columna01. la clusula PRIMARY KEY define a
Columna01 con una restriccin de clave principal llamada pk_columna01, que es un ndice agrupado con valores nicos
de clave por defecto.

El uso de clusulas opcionales para la creacin de ndices personaliza el siguiente comando CREATE TABLE:

CREATE TABLE Tabla01 (Columna01 int


CONSTRAINT pk_columna01
PRIMARY KEY
WITH FILLFACTOR = 50
ON SECONDARY)

La sintaxis de ALTER TABLE para crear o modificar restricciones PRIMARY KEY o UNIQUE es similar a la del comando
CREATE TABLE. En el comando ALTER TABLE, s debe especificar si se est modificando, agregando o eliminando una
restriccin. Por ejemplo, el siguiente comando ALTER TABLE agrega una columna una restriccin UNIQUE para la tabla
Tabla01:

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (7 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

ALTER TABLE tabla01 ADD Columna02 int


CONSTRAINT uk_columna02
UNIQUE

La restriccin de unicidad se llama uk_columna02 y es un ndice no agrupado. Una restriccin de unicidad crea un ndice
no agrupado salvo que se especifique la clusula CLUSTERED y que no exista previamente un ningn ndice agrupado.

Administrar ndices

Las tareas de mantenimiento de ndices incluyen reconstruccin, eliminacin, y renombrado. Un ndice se elimina si no
se lo va a utilizar ms o si esta corrupto. Se reconstruye para la mantener un factor de llenado personalizado o para
reorganizar el almacenamiento de los datos del ndice para eliminar su fragmentacin. Los ndices se renombran si
cambi la convencin de nombres adoptada o si existen ndices que no respetan la convencin de nombres.

Eliminar un ndice

Los ndices en desuso de tablas que son frecuentemente actualizadas con nueva informacin deberan ser removidos. En
caso contrario, SQL Server desperdiciara recursos en mantener ndices en desuso. Use la siguiente sintaxis para
eliminar un ndice:

DROP INDEX nombre_tabla.nombre_indice | nombre_vista.nombre_indice

El nombre de la tabla o de la vista debe ser incluido en el comando DROP INDEX. Se pueden eliminar varios ndices con
un solo comando DROP INDEX. El siguiente comando borra un ndice de una tabla y uno de una vista:

DROP INDEX Tabla01.Indice01, Vista01.Indice02

Se puede eliminar un ndice usando el Object Browser en el Query Analizer o utilizando el Entreprise Manager.

Reconstruir un ndice

Si existe un ndice agrupado sobre una tabla o una vista, cualquier ndice no agrupado sobre la misma tabla o vista
usar el ndice agrupado y su clave. Si se elimina el ndice agrupado utilizando el comando DROP INDEX se provocar
que todos los ndices no agrupados sean reconstruidos para que utilicen el RID (en vez de la clave del ndice). Si un
ndice agrupado se recrea usando el comando CRETE INDEX provoca que todos los ndices no agrupados sean
reconstruidos utilizando para acceder a cada registro la clave del nuevo ndice agrupado en vez del RID. Para tablas o
vista grandes con varios ndices, este proceso de reconstruccin puede consumir bastantes recursos. Afortunadamente
existen otros recursos para reconstruir un ndice que eliminarlo y volverlo a crear. Utilizando el comando DBCC
DBREINDEX o especificando la clusula DROP_EXISTING en el comando CREATE TABLE.

El comando DBCC DBREINDEX reconstruye, a travs de un solo comando, uno o ms ndices sobre una tabla o vista.
Esta capacidad evita tener que utilizar mltiples comandos DROP INDEX y CREATE INDEX para reconstruir mltiples
ndices. Para reconstruir todos los ndices, utilice el comando DBCC DBREINDEX para reconstruir el ndice agrupado y por
lo tanto, se proceder a la reconstruccin de todos los ndices en la tabla o vista. Si se usa el comando DBCC
DBREINDEX sin indicar ningn ndice se reconstruirn todos los ndices de la tabla o vista. El comando DBCC DBREINDEX
es especialmente til para ndices creados por las restricciones de clave primaria y de unicidad, porque a diferencia de
DROP INDEX, no es necesario borrar la restriccin antes de reconstruir el ndice. Por ejemplo, el siguiente comando
fallar al borrar un ndice sobre una restriccin de clave primaria llamada pk_Columna01:

DROP INDEX Tabla01.pk_columna01

Sin embargo, el siguiente comando DBCC DBREINDEX reconstruir el ndice para la restriccin de clave primaria:

DBCC DBREINDEX (Tabla01.pk_columna01, 60)

El ndice pk_columna01 soblre la restriccin de clave primaria pk_columna01 es reconstruido con un factor de llenado
del 60 por ciento. DBCC DBREINDEX es comnmente utilizado para reestablecer la configuracin del factor de llenado
sobre los ndices a fin de bajar la frecuencia de divisin de las pginas del ndice.

La clusula DROP_EXISTING de un comando CREATE INDEX reemplaza un ndice con el mismo nombre de una tabla o
vista. Como resultado, el ndice es reconstruido, la clusula DROP_EXISTING provee de mayor eficiencia al proceso de
reconstruccin del ndice, mas que DBCC DBREINDEX,. Si se utiliza el comando CREATE INDEX con la clusula
DROP_EXISTING para reemplazar un ndice agrupado con idntica clave de ndice, los ndices no agrupados no son
reconstruidos y la tabla no es reordenada. Si se cambia la clave del ndice agrupado los ndices no agrupados son
reconstruidos y la tabla reordenada.

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (8 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

Renombrar un ndice

Se puede renombrar un ndice eliminndolo y recrendolo. Una forma mas simple de renombrar un ndice, sin embargo,
es usar el procedimiento almacenado del sistema sp_rename. El siguiente ejemplo muestra como renombrar un ndice
llamado indice01 por indice02.

sp_rename @objname = Tabla01.indice01 , @newname = indice02,

@objtype = INDEX

El nombre de la tabla fue incluido en el parmetro de entrada @objname. Si no se indica el nombre de la tabla en dicho
parmetro, el procedimiento almacenado no podra encontrar al ndice para renombrarlo. Sin embargo, el nombre de la
tabla fue intencionalmente excluido del parmetro @newname, ya que si se lo incluyera el nuevo nombre del ndice
incluira el nombre de la tabla. Por ejemplo, si se especifica @newname = Tabla01.indice02 el ndice se llamara
Tabla01.indice02 en vez de indice02. El nombre de la tabla es innecesario en el parmetro @newname porque lo toma
de parmetro @objname. El parmetro de entrada @objtype debe ser configurado como INDEX o el procedimiento
almacenado ser incapaz de ubicar el tipo de objeto correcto a ser renombrado.

Elegir un ndice

Esta seccin provee lineamientos adicionales para determinar cuando crear un ndice y decidir que propiedades del
ndice configurar para un ptimo rendimiento. Tenga en cuenta que solamente un ndice agrupado es permitido por tabla
o vista. Por lo que un diseo cuidadoso del ndice no agrupado ser mas importante que el diseo de los ndices no
agrupados.

Se crean ndices de acuerdo a los tipos de consultas que los usuarios comnmente ejecutan contra la base de datos. El
Query Optimizer luego selecciona uno o mas ndices para realizar la consulta. Los siguientes tipos de consultas,
separadas o en combinacin se benefician de los ndices:

ndices agrupados

Puesto que los datos estn ordenados fsicamente segn una clave agrupada, realizar bsquedas mediante un ndice
agrupado es casi siempre ms rpidos que realizarlas mediante un ndice no agrupado. Puesto que slo se permite crear
un ndice agrupado por tabla, selecciones dicho ndice de manera juiciosa. Las siguientes reglas le ayudarn a
determinar cundo elegir un ndice agrupado:

Columnas en las que el ndice tenga pocos valores distintos. Puesto que los datos estn fsicamente
ordenados, todos los valores duplicados se mantienen agrupados. Cualquier consulta que trate de extraer
registros con tales claves encontrar todos los valores con un nmero mnimo de operaciones de E/S.

Columnas que suelan ser especificadas en la clusula ORDER BY. Puesto que los datos ya estn ordenados,
SQL Server no tiene que volverlos a ordenar.

Columnas en las que se suelan realizar bsquedas de rangos de valores. Puesto que la pgina hoja de un
ndice agrupado es, en realidad una pgina de datos, los punteros de un ndice agrupado hacen referencia a las
pginas en las que los datos residen. SQL Server puede usar este ndice para localizar las pginas inicial y final
del rango especificado, lo que permite una ms rpida exploracin del rango.

Columnas que sean usadas ms frecuentemente en la clusula JOIN.

Consultas que puedan devolver grandes conjuntos de resultados con valores de clave adyacentes.

ndices no agrupados

Recuerde siempre que, a medida que aada mas ndices al sistema, las instrucciones de modificacin de datos se harn
mas lentas.

Las siguientes reglas le ayudarn a elegir el ndice no agrupado correcto para su entorno:

Columnas que tengan un gran nmero de valores diferentes o consultas que devuelvan conjuntos de
resultados pequeos. Puesto que las pginas hojas de un ndice no agrupado contienen punteros al identificador
de la fila de la pgina de datos. SQL Server puede utilizar un ndice no agrupado para acceder de forma bastante
eficiente a los registro individuales.

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (9 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 2/5

Consultas que empleen columnas indexadas en las clusulas WHERE y ORDER BY Si el Query Optimizer
selecciona un ndice no agrupado, el orden de los valores de clave en el rbol binario ser el mismo que las
columnas especificadas en la clusula ORDER BY. En tales casos, SQL Server puede prescindir de crear una tabla
de trabajo temporal interna para realizar la ordenacin de los datos. La siguiente consulta es un ejemplo de
situacin en la que SQL Server evita el paso adicional de crear una tabla de trabajo para una ordenacin:

SELECT * FROM Autores WHERE Estado LIKE c%


ORDER BY Estado

Recubrimiento de ndice

El recubrimiento de ndice es una situacin en que todas las columnas de las clusulas SELECT y WHERE de la consulta
forman tambin parte del ndice no agrupado o de la clave del ndice agrupado (si es que existe). Esto tiene como
resultado una consulta mucho ms rpida porque toda la informacin puede provenir directamente de la pgina ndice y
SQL Server evita realizar accesos a las pginas de datos. El siguiente ejemplo tiene n ndice no agrupado sobre las
columnas Autor_Apellido y Autor_Nombre de la tabla Autores

SELECT Autor_Apellido, Autor_Nombre


FROM Autores
WHERE Autor_Apellido LIKE M%

Mucha otras consultas que utilicen una clusula de agregacin (como MIN, MAX, AVG, etc) o que comprueben la
existencia de un criterio tambin se benefician del recubrimiento de ndice. La consulta siguiente es un ejemoplo de
recubrimiento de ndice mediante agregados:

SELECT COUNT(Autor_Apellido) FROM Autores WHERE Autor_Apellido LILE M%

ndices compuesto frente a ndices mltiples

A medida que la clave se hace ms ancha, la selectividad de la misma se hace tambin mejor. Pudiera parecer, por
tanto, que crear ndices anchos da como resultado un mejor rendimiento, pero eso no es cierto de manera general. La
razn es que, cuanto ms ancha sea la clave, menos filas puede almacenar SQL Server en la pginas de ndice, haciendo
que haya un mayor nmero de niveles de rbol binario; como consecuencia, para llegar a una fila especfica. SQL Server
debe realizar ms operaciones de E/S. Para obtener un mejor rendimiento de las consultas, cree mltiples ndices
estrechos, en lugar de unos pocos anchos. La ventaja es que con claves ms pequeas, el optimizador puede explorar
rpidamente mltiples ndices para crear el plan de acceso ms eficiente. Asimismo, al disponer de ms ndices, el
optimizador puede elegir entre varias alternativas. Si est tratando de determinar si usar una clave ancha, compruebe la
distribucin individual de cada miembro de la clave compuesta. Para ello utilice el valor de la selectividad que es el
cociente entre la cantidad de registros distintos de la clave sobre el total de registros de la tabla y configura la inversa
de la densidad de la clave Si la selectividad de la columnas individuales es muy buena (mayor al 70%), considere partir
el ndice en mltiples ndices. Si la selectividad de las columnas individuales es mala, pero es buena para las columnas
combinadas, tiene sentido disponer claves ms anchas en una tabla. Para obtener la combinacin correcta, llene la tabla
con datos tomados del mundo real, experimente creando mltiples ndices y compruebe la distribucin de cada columna.
Basndose en los pasos de distribucin y en la densidad de ndice podr tomar la decisin que mejor funcione para su
entorno.

< Tema 4

http://www.sqlmax.com/centro/moduloII_5.asp?MX= (10 de 10)20/11/2007 04:05:21 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO III: Implementar una base de datos y sus tablas

TEMA 1: Principios del lgebra relacional

Un panorama general del lgebra:

El lgebra relacional consiste en un conjunto de operadores de alto nivel que operan sobre relaciones. Cada uno de estos
operadores toma una o dos relaciones como entrada y produce una nueva relacin como salida. Desde luego, sera
posible en principio definir cualquier cantidad de operadores que se ajustaran a esta sencilla definicin (ya sea una o dos
relaciones como entrada, otra relacin como salida) No obstante, Codd defini un conjunto muy especifico de ocho
operadores de este tipo, en dos grupos de cuatro cada uno:

1. las operaciones tradicionales de conjuntos unin, interseccin, diferencia y producto cartesiano (todas ellas con
ligeras modificaciones debidas al hecho de tener relaciones como operandos, y no conjuntos arbitrarios, despus de
todo, una relacin es un tipo especial de conjunto) y,
2. las operaciones relacionales especiales restriccin, proyeccin, reunin y divisin.

Por aadidura, Codd tenia un claro objetivo cuando defini precisamente estos ocho operadores, y lo analizaremos en el
siguiente capitulo. Pero el lector debe entender que sin duda es posible definir operadores adicionales de naturaleza
algebraica, y en efecto muchos de ellos han sido propuestos por distintos autores. En este capitulo analizaremos primero
los operadores originales de Codd (o al menos nuestra versin de esos operadores), y los utilizaremos como base para el
anlisis de varios conceptos algebraicos, en seguida consideraremos cmo podra ser conveniente ampliar el conjunto
original de Codd.
Los ocho operadores originales se representan en forma simblica en la figura
A grandes rasgos, funcionan como sigue:

Restriccin: Extrae las tuplas especificadas de una relacin dada (o sea, restringe la relacin slo a las tuplas que
satisfagan una condicin especificada.

Proyeccin: Extrae los atributos especificados de una relacin dada.

Producto: A partir de dos relaciones especificadas, construye una relacin que contiene todas las combinaciones
posibles de tuplas, una de cada una de las dos relaciones.

Unin: Construye una relacin formada por todas las tuplas que aparecen en cualquiera de las dos relaciones
especificadas.

Interseccin: Construye una relacin formada por aquellas tuplas que aparezcan en las dos relaciones especificadas.

Diferencia: Construye una relacin formada por todas las tuplas de la primera relacin que no aparezcan en la segunda
de las dos relaciones especificadas.

Reunin: A partir de dos relaciones especificadas, construye una relacin que contiene todas las posibles combinaciones
de tuplas, una de cada una de las dos relaciones, tales que las dos tuplas participantes en una combinacin dada
satisfagan alguna condicin especificada.

Divisin: Toma dos relaciones, una binaria y una unaria, y construye una relacin formada por todos los valores de un
atributo de la relacin binaria que concuerdan (en el otro atributo) con todos los valores en la relacin unaria.

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (1 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

Figura 1: Los ocho operadores originales (panorama general)

Advirtase que el resultado de cada una de las operaciones es (por supuesto) otra relacin. Esta es la importantsima
propiedad de cerradura. En esencia, dado que el resultado de cualquier operacin es un objeto del mismo tipo que los
operandos, todos son relaciones, el resultado de una operacin puede convertirse en operando de otra. As pues, es
posible (por ejemplo) sacar la proyeccin de una unin, o una reunin de dos restricciones, o la diferencia de una unin
y una interseccin, etc. Dicho de otro modo, es posible escribir expresiones relacionales anidadas, es decir, expresiones
en las cuales los operandos mismos estn representados mediante expresiones, y no slo mediante nombres. Veremos

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (2 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

muchos ejemplos de tales operaciones anidadas mas adelante en este tema.

Nota:
Existe una analoga obvia entre la capacidad de anidar expresiones algebraicas en lgebra relacional y la capacidad de
anidar expresiones aritmticas en aritmtica ordinaria. En efecto el hecho de que las relaciones estn cerradas en el
lgebra es importante exactamente por las mismas razones por las que es importante el hecho de que los nmeros
estn cerrados en la aritmtica ordinaria.
Por cierto, cuando hablamos de la importancia de la cerradura y decimos que el resultado de toda operacin es otra
relacin, estamos hablando desde luego desde un punto de vista conceptual. No es nuestra intencin sugerir que el
sistema debe siempre materializar en su totalidad el resultado de cada operacin individual. Vamos a suponer, por
ejemplo, que estamos tratando de calcular una restriccin de una reunin. Al construirse cada tupla de la reunin, el
sistema puede aplicar de inmediato la restriccin a la tupla para ver si debe incluirse en el resultado final, y desecharla
en ese momento si no. En otras palabras, el resultado intermedio producido por la reunin podra no existir nunca en si
mismo como una relacin materializada por completo. De hecho, y como regla general, el sistema trata hasta donde
puede de no materializar resultados intermedios en su totalidad, por razones de desempeo obvias.

Las operaciones tradicionales de conjuntos:

Ahora examinaremos con cierto detalle las operaciones individuales del lgebra relacional original
Las operaciones tradicionales de conjuntos son unin, interseccin, diferencia y producto (en trminos ms precisos,
producto cartesiano ampliado). Nos concentraremos primero en la unin.
En matemticas, la unin de dos conjuntos es el conjunto de todos los elementos pertenecientes a uno de los conjuntos
originales, o a ambos. Como una relacin es, en trminos informales, un conjunto (de tuplas), resulta obvio que es
posible construir la unin de dos relaciones, el resultado ser un conjunto formado por todas las tuplas que aparecen en
una de las relaciones originales, o en ambas. Por ejemplo, la unin del conjunto de tuplas de proveedores en la relacin
S y el conjunto de tuplas de partes en la relacin P ser sin duda un conjunto.
Sin embargo, aunque el resultado es un conjunto, no es una relacin, las relaciones no pueden contener una mezcla de
diferentes tipos de tuplas, deben ser homogneas en sus tuplas. Y, desde luego, queremos que el resultado sea una
relacin: deseamos conservar la propiedad de cerradura. Por tanto, la unin incluida en el lgebra relacional no es la
unin matemtica completamente general, ms bien, es una forma limitada de unin, en la cual se obliga a las dos
relaciones de entrada a tener lo que podramos llamar en trminos informales la misma forma, es decir, por ejemplo,
que las dos deben contener tuplas de proveedores, o las dos deben contener tuplas de partes, y no una mezcla. Si las
dos relaciones tienen la misma forma en este sentido, podremos obtener su unin, y el resultado ser tambin una
relacin con la misma forma, en otras palabras, se habr conservado la propiedad de cerradura.
Un termino mas preciso para el concepto la misma forma es compatibilidad respecto a la unin. Diremos que dos
relaciones son compatibles respecto a la unin si y solo si sus cabeceras son idnticas, lo cual significa, en trminos
precisos que:

a. las dos tienen el mismo conjunto de nombres atributos (advirtase, por tanto, que deben tener por fuerza el mismo
grado), y
b. los atributos correspondientes (es decir, los atributos con el mismo nombre en las dos relaciones) se definen sobre el
mismo dominio.

La unin, la interseccin y la diferencia requieren todas operandos compatibles respecto a la unin (se aplican
argumentos anlogos a los presentados en el caso de la unin, tambin a la interseccin y a la diferencia). El producto
cartesiano, en cambio, no tiene este requerimiento (aunque si tiene otro requerimiento distinto).

Unin

La unin de dos relaciones A y B compatibles respecto a la unin, A UNION B, es una relacin cuya cabecera es idntica
a la de A o B y cuyo cuerpo est formado por todas las tuplas t pertenecientes ya sea a A o a B (o a las dos)
Ejemplo: sean A y B las relaciones presentadas en la figura (A contiene en trminos intuitivos, los proveedores de
Londres y B contiene los proveedores que suministran la parte P1). Entonces A UNION B, vase la parte (a) de la figura,
consistir en los proveedores que o bien estn situados en Londres, o que suministran la parte P1 (o las dos cosas).
Advirtase que el resultado tiene tres tuplas, no cuatro (se eliminan las tuplas repetidas).

Relaciones base

A S# SNOMBRE SITUACION CIUDAD B S# SNOMBRE SITUACION CIUDAD

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (3 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

S1 Salazar 20 Londres S1 Salazar 20 Londres

S4 Corona 20 Londres S2 Jaime 10 Paris.

Unin (A UNION B)

S# SNOMBRE SITUACION CIUDAD

S1 Salzar 20 Londres

S4 Corona 20 Londres

S2 Jaimes 10 Paris

Interseccion (A INTERSECT B)

S# SNOMBRE SITUACION CIUDAD

S1 Salazar 20 Londres

Diferencia (A MINUS B)

S# SNOMBRE SITUACION CIUDAD S# SNOMBRE SITUACION CIUDAD

S4 Corona 20 Londres S2 Jaimes 10 Paris.

Figura 2: Ejemplos de unin, interseccin y diferencia.

Interseccin

La interseccin de dos relaciones compatibles respecto a la unin A y B, A INTERSECT B, es una relacin cuya cabecera
es idntica a la de A o B y cuyo cuerpo est formado por todas las tuplas t pertenecientes tanto a A como a B.
Ejemplo: Una vez ms, sean A y B las relaciones presentadas en la figura Entonces A INTERSECT B, vase la parte B de
la figura, consistir en los proveedores situados en Londres, y que suministran la parte P1.

Diferencia

La diferencia entre dos relaciones compatibles respecto a la unin A y B, A MINUS B, es una relacin cuya cabecera es
idntica a la de A o B y cuyo cuerpo est formado por todas las tuplas t pertenecientes a A pero no a B.
Ejemplo: Sean A y B las relaciones presentadas en la figura. Entonces A MINUS B contendr los proveedores situados en
Londres que no suministran la parte P1, y B MINUS A incluir los proveedores que suministran la parte P1 y no estn
situados en Londres. Advirtase que MINUS tiene cierta direccionalidad, como la tiene la resta en aritmtica ordinaria
(por ejemplo, 5 - 2 y 2-5 son diferentes en aritmtica).

Producto cartesiano ampliado.

En matemticas, el producto cartesiano de dos conjuntos es el conjunto de todos los pares ordenados de elementos
tales que el primer elemento de cada par pertenece al primer conjunto y el segundo elemento de cada par pertenece al
segundo conjunto. As, el producto cartesiano de dos relaciones sera un conjunto de pares ordenados de tuplas. Pero
(una vez ms) deseamos conservar la propiedad de cerradura, en otras palabras, deseamos un resultado compuesto de
tuplas, no de pares ordenados de tuplas (aqu tambin empleamos trminos un poco informales). Por tanto, la versin
del producto cartesiano en lgebra relacional es una forma ampliada de la operacin, en la cual cada par ordenado de
tuplas es reemplazado por la tupla resultante de la combinacin de las dos tuplas en cuestin. Aqu, combinacion
significa en esencia unin (en el sentido de la teora de conjuntos, no del lgebra relacional), es decir, dadas las dos
tuplas

(A1:a1, A2: A2, ......., Am, am) y (B1: b1, B2: b2,......, Bn: bn)

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (4 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

(se muestran los nombres de atributos para hacerlas ms explicitas), la combinacin de las dos es la tupla nica

(A1:a1, A2: A2, ......., Am, am, B1: b1, B2: b2,......, Bn: bn)

Otro problema que surge en conexin con el producto cartesiano es la necesidad de una cabecera bien formada para la
relacin resultante. Ahora bien, es evidente que la cabecera del resultado es en esencia slo la combinacin de las dos
cabeceras de las dos relaciones de entrada. Por tanto, se presentar un problema si esas dos cabeceras tienen algn
nombre de atributo en comn. As pues, si necesitamos formar el producto cartesiano de dos relaciones cuyas cabeceras
tienen nombres de atributo en comn, deberemos modificar de manera apropiada los nombres de los atributos.
Entonces diremos que dos relaciones son compatibles respecto al producto si y solo si sus cabeceras son disjuntas (es
decir, no tienen nombres de atributo en comn).
Por tanto, definimos el producto cartesiano de dos relaciones (compatibles respecto al producto) A y B, A TIMES B, como
una relacin cuya cabecera es la combinacin de las cabeceras de A y B y cuyo cuerpo est formado por el conjunto de
todas las tuplas t tales que t es la combinacin de una tupla a perteneciente a A y una tupla b perteneciente a B.
Ejemplo: Sean A y B las relaciones presentadas en la figura (A, en trminos intuitivos, consiste en todos los nmeros de
proveedores vigentes y B en todos los nmeros de parte vigentes) Entonces A TIMES B, vase la parte inferior de la
figura, estar formada por todas las combinaciones de nmeros de proveedor/nmero de parte vigentes.
No debemos terminar este anlisis del producto cartesiano sin sealar que esta operacin no tiene mucha importancia
prctica. Es decir, no es muy importante en la prctica que un sistema relacional maneje esa operacin (aunque de
hecho la mayor parte de ellos lo hacen ). El producto cartesiano se incluye en el lgebra relacional sobre todo por
razones conceptuales. En particular, se ver que el producto cartesiano es necesario como paso intermedio en la
definicin de la operacin reunin theta (y esta ultima operacin si es importante en la prctica).

Relaciones base

A S# B P#

S1 P1

S2 P2

S3 P3

S4 P4

S5 P5

P6

Producto Cartesiano (A TIMES B)

S# P#

S1 P1 S2 P1 S3 P1 S4 P1 S5 P1

S1 P2 S2 P2 S3 P2 S4 P2 S5 P2

S1 P3 S2 P3 S3 P3 S4 P3 S5 P3

S1 P4 S2 P4 S3 P4 S4 P4 S5 P4

S1 P5 S2 P5 S3 P5 S4 P5 S5 P5

S1 P6 S2 P6 S3 P6 S4 P6 S5 P6

Figura 3: Ejemplo de producto cartesiano.

Asociatividad

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (5 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

Es fcil comprobar que la unin es asociativa; es decir, si A,B y C son proyecciones arbitrarias (en el sentido de la
figura 13.2), entonces las expresiones

( A UNION B) UNION C

A UNION (B UNION C)

son equivalentes
As, por comodidad, nos permitiremos escribir una secuencia de uniones sin insertar parntesis, por ejemplo, cualquiera
de las dos expresiones anteriores puede simplificarse a:

A UNION B UNION C

Sin provocar ambigedad.


Algo anlogo puede decirse de la interseccin y el producto (pero no de la diferencia). Sealamos tambin que la unin,
la interseccin y el producto (pero no la diferencia) son conmutativas, es decir, las expresiones

A UNION B

B UNION A

Son equivalentes tambin, y lo mismo sucede con INTERSECT y TIMES.

Operaciones relacionales especiales:

Ahora nos ocuparemos de las operaciones relacionales especiales restriccin, proyeccin, reunin (varias clases) y
divisin.

Restriccin

Sea theta la representacin de cualquier operador de comparacin escalar simple (por ejemplo =. <>, >,>=, etc.). La
restriccin theta de la relacin A segn los atributos X y Y-

A WHERE X theta Y

Es una relacin con la misma cabecera que A y con un cuerpo formado por el conjunto de todas las tuplas t de A tales
que la evaluacin de la comparacin X theta Y resulta verdadera en el caso de esa tupla t. (Los atributos X y Y deben
estar definidos sobre el mismo dominio y la operacin theta debe ser aplicable a ese dominio. Adems, por supuesto, la
relacin A no debe ser por fuerza una relacin nombrada, y puede representarse mediante una expresin arbitraria del
lgebra relacional).
Se puede especificar un valor literal en vez del atributo X o del atributo Y (o de ambos, desde luego), de hecho, esto es
lo ms comn en la prctica. Por ejemplo:

A WHERE X theta literal

Advirtase que el operador de restriccin theta produce en realidad un subconjunto horizontal de una relacin dada,
es decir, el subconjunto de las tuplas de la relacin dada para las cuales se satisface una comparacin especificada.
Nota: se acostumbra abreviar restriccion theta a slo restriccion.
La operacin de restriccin tal como se acaba de definir permite slo una comparacin simple en la clusula WHERE
(donde). No obstante, es posible, en virtud de la propiedad de cerradura, ampliar la definicin sin ambigedad a una
forma en al cual la expresin arbitraria de tales comparaciones simples, segn se indica con las siguientes equivalencias:

1. A WHERE c1 AND c2

Se define como equivalente a

(A WHERE c1) INTERSECT (A WHERE c2)

2. A WHERE c1 OR c2

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (6 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

Se define como equivalente a

( A WHERE c1) UNION (A WHERE c2)

3. A WHERE NOT c

Se define como equivalente a

A MINUS (A WHERE c)

En adelante daremos por hecho que la expresin condicional en la clusula WHERE de una restriccin est formada por
este tipo de combinaciones booleanas arbitrarias de comparaciones simples. Una expresin condicional como sta (es
decir, una validez en el caso de una tupla determinada puede establecerse con slo examinar esa tupla aislada) se
conoce como condicin de restriccin.
En la figura 4 se presentan algunos ejemplos de restriccin.

S WHERE CIUDAD = Londres

S# SNOMBRE SITUACION CIUDAD

S1 Salazar 20 Londres

S4 Corona 20 Londres

P WHERE PESO < 14

P# PNOMBRE COLOR PESO CIUDAD

P1 Tuerca Rojo 12 Londres

P5 Leva Azul 12 Paris

SP WHERE S# = S1
AND P# = P1

S# P# CANTIDAD

S1 P1 300

Figura 4: Ejemplos de restriccin.

Proyeccin

La proyeccin de la relacin A segn los atributos X,Y,...., Z-

A (X,Y,....,Z)

Es una relacin con (X,Y,..., Z) como cabecera y cuyo cuerpo est formado por el conjunto de todas las tuplas (X:x, Y:
y,...,Z:z) tales que una tupla t aparece en A con el valor X en X, el valor y en Y, ..., y el valor z en Z. As, el operador de
proyeccin produce un subconjunto vertical de una relacin dada, o sea, el subconjunto obtenido mediante la
seleccin de los atributos especificados y la eliminacin de las tuplas repetidas dentro de los atributos seleccionados.
Desde luego, en este caso la relacin A tampoco necesita ser una relacin nombrada, y puede representarse mediante
una expresin arbitraria.
Nota: ningn atributo puede especificarse ms de una vez en la lista de atributos de una operacin de proyeccin (por
qu no?). Sin embargo, la sintaxis de la figura 13.2 si permite omitir del todo la lista de atributos. Omitir por completo
esta lista equivale a especificar una lista con todos los atributos de la relacin original, es decir, representa la proyeccin
identidad. (En cambio, la especificacin de una lista vaca, como en R (), por ejemplo, representara la proyeccin nula.
En la figura 13.6 se presentan algunos ejemplos de proyeccin. Obsrvese en el primer ejemplo (la proyeccin de

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (7 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

proveedores segn el atributo CIUDAD) que, aunque la relacin S tiene cinco tuplas y por tanto cinco ciudades, slo hay
tres ciudades en el resultado, como ya se explic, las tuplas repetidas se elimina (como siempre). Desde luego, lo
mismo puede decirse tambin de los otros ejemplos.

S (CIUDAD)

CIUDAD

Londres

Paris

Atenas

P (COLOR, CIUDAD)

COLOR CIUDAD

Rojo Londres

Verde Paris

Azul Roma

Azul Paris

( S WHERE CIUDAD = Paris) (S#)

S#

S2

S3

Figura 5: Ejemplos de proyeccin.

Reunin natural

La operacin de reunin tiene varias formas distintas. Definitivamente, la ms importante es la reunin natural, que
definimos como sigue.
Sean las cabeceras de las relaciones A y B.

(X1, X2,...Xm, Y1, Y2,....., Yn)

(Y1,Y2,...,Yn,Z1,Z2,....Zp)

respectivamente, es decir, los atributos Y1, Y2,..., YN son (los nicos) comunes a las dos relaciones, los atributos X1,
X2,...Xm son los dems atributos de A, y los atributos Z1, Z2,...,Zp son los dems atributos de B. Vamos a suponer
tambin que los atributos correspondientes (es decir, los atributos con el mismo nombre) estn definidos sobre el mismo
dominio. Consideremos ahora (X1,X2,...,Xm), (Y1,Y2,....,.Yn) y (Z1,Z2,...Zp) como tres atributos compuestos X,Y y Z,
respectivamente. La reunin natural de A y B

A JOIN B

Es una relacin con la cabecera (X,Y,Z) y un cuerpo formado por el conjunto de todas las tuplas (X:X, Y:y, Z:z) tales que
una tupla a aparezca en A con el valor x en X y el valor y en Y, y una tupla b aparezca en B con el valor y en Y y el valor

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (8 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

z en Z. Como siempre, las relaciones A y B pueden estar representadas por expresiones arbitrarias.
En la figura se presenta un ejemplo de reunin natural (la reunin natural S JOIN P, segn el atributo comn CIUDAD)
La reunin natural, tal como la hemos definido, es tanto asociativa como conmutativa (Ejercicio: Comprobar estas
aseveraciones). En consecuencia, las dos expresiones.

( A JOIN B ) JOIN C

A JOIN (B JOIN C)

Se puede simplificar, sin provocar ambigedad, a

A JOIN B JOIN C

Adems, las dos expresiones


A JOIN B

B JOIN A

son equivalentes.
Cabe sealar que, si A y B no tienen nombres de atributos en comn, A JOIN B es equivalente a A TIMES B (es decir, la
reunin natural degenera en el producto cartesiano, en este caso).

S# SNOMBRE SITUACION CIUDAD P# PNOMBRE COLOR PESO

S1 Salazar 20 Londres P1 Tuerca Rojo 12

S1 Salazar 20 Londres P4 Birlo Rojo 14

S1 Salazar 20 Londres P6 Engrane Rojo 19

S2 Jaime 10 Paris P2 Perno Verde 17

S2 Jaime 10 Paris P5 Leva Azul 12

S3 Bernal 30 Paris P2 Perno Verde 17

S3 Bernal 30 Paris P5 Leva Azul 12

S4 Corona 20 Londres P1 Tuerca Rojo 12

S4 Corona 20 Londres P4 Birlo Rojo 14

S4 Corona 20 Londres P6 Engrane Rojo 19

Figura 6: La reunin natural S JOIN P

Reunin - theta

Ahora pasamos a la operacin de reunin theta. La reunin theta es adecuada para aquellas ocasiones (poco frecuentes
en comparacin, pero de ninguna manera desconocidas) en las cuales necesitamos juntar dos relaciones con base en
alguna condicin diferente a la igualdad. Sean las relaciones A y B compatibles respecto al producto (o sea, no tienen
nombres de atributos en comn, vase el anlisis del producto cartesiano en la seccin 13.3), y sea theta un operador
segn la definicin dada en el anlisis de la restriccin. La reunin theta de la relacin A segn el atributo X con la
relacin B segn el atributo Y se define como el resultado de evaluar la expresin.

( A TIMES B) WHERE X theta Y

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (9 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

En otras palabras, es una relacin con la misma cabecera que el producto cartesiano de A y B, y con un cuerpo formado
por el conjunto de todas las tuplas t tales que t pertenece a ese producto cartesiano y la evaluacin de condicin X
theta Y resulta verdadera para esa tupla t. (Los atributos X y Y debern estar definidos sobre el mismo dominio, y la
operacin theta debe ser aplicable a ese dominio)
Vamos a suponer, por ejemplo, que deseamos calcular la reunion mayor que de la relacin S segn CIUDAD con la
relacin P segn CIUDAD
Una expresin apropiada del lgebra relacional es:

( ( S RENAME CIUDAD AS SCIUDAD) TIMES ( P RENAME CIUDAD AS PCIUDAD) )

WHERE SCIUDAD > PCIUDAD.

El resultado se muestra en la figura. Nota: seria suficiente renombrar slo uno de los dos atributos CIUDAD, la nica
razn para cambiar el nombre de los dos es la simetra.
Advirtase que la reunin theta no es una operacin primitiva, siempre es equivalente a obtener el producto cartesiano
ampliado de las dos relaciones (con modificaciones apropiadas de los nombres de los atributos, si es necesario), y
despus realizar una restriccin apropiada sobre el resultado.
Si theta es igual a, la reunin theta se llama equirreunion. Por la definicin, el resultado de una equirreunin debe
incluir dos atributos con la propiedad de que los valores de esos dos atributos son iguales entre si en cada tupla de la
relacin. Si se elimina uno de esos dos atributos (lo cual puede hacerse mediante una proyeccin), el resultado ser la
la reunin natural! Por tanto, la reunin natural tampoco es una operacin primitiva, es una proyeccin de una
restriccin de un producto (una vez ms, con las operaciones apropiadas para renombrar atributos) Por ejemplo, la
expresin que representa la reunin natural de proveedores y partes (segn ciudades).

S JOIN P

Es equivalente a la siguiente expresin, ms compleja:

( ( S TIMES ( P RENAME CIUDAD AS PCIUDAD ) ) WHERE CIUDAD = PCIUDAD)


(S#, SNOMBRE, SITUACIN, CIUDAD, P#, PNOMBRE, COLOR, PESO)

S# SNOMBRE SITUACION CIUDAD P# PNOMBRE COLOR PESO PCIUDAD

S2 Jaime 10 Paris P1 Tuerca Rojo 12 Londres

S2 Jaime 10 Paris P4 Birlo Rojo 14 Londres

S2 Jaime 10 Paris P6 Engrane Rojo 19 Londres

S3 Bernal 30 Paris P1 Tuerca Rojo 12 Londres

S3 Bernal 30 Paris P4 Birlo Rojo 14 Londres

S3 Bernal 30 Paris P6 Engrane Rojo 19 Londres

Figura 7: La reunin mayor - que de S y P segn ciudades.

Divisin:

Sean las cabeceras de las relaciones A y B

(X1,X2,...Xm, Y1,Y2,..., Yn)

(Y1,Y2,...Yn)

respectivamente, es decir, los atributos Y1, Y2,....Yn son comunes a las dos relaciones. Adems, A tiene los atributos X1,
X2,...Xm y B no tiene otros atributos. (Las relaciones A y B representan al dividendo y al divisor, respectivamente)
Vamos a suponer que los atributos correspondientes ( es decir, los atributos con el mismo nombre) estn definidos

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (10 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3/1

sobre el mismo dominio. Consideremos ahora a (X1, X2,...,Xm) y (Y1, Y2,...Yn) como dos atributos compuestos X y Y.
La divisin de A entre B.

A DIVIDEBY B

Es una relacin con la cabecera (X) y un cuerpo formado por el conjunto de todas las tuplas (X:x) tales que aparece una
tupla (X:x, Y:y) en A para todas las tuplas (Y:y) presentes en B. En otras palabras, el resultado contiene todos los
valores de X en A cuyos valores de Y correspondientes en A incluyen a todos los valores de Y en B, en trminos
informales). Como siempre, las relaciones A y B pueden ser expresiones.

< Programa Tema 2 >

http://www.sqlmax.com/centro/moduloIII_1.asp?MX= (11 de 11)20/11/2007 04:05:29 a.m.


SQL SERVER Manual en Linea - Modulo 3 / 2

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO III: Consultar y modificar datos

TEMA 2: Acceder a los datos en una Base de Datos SQL Server

El comando SELECT se utiliza para recuperar datos desde una base de datos SQL Server y para presentarlos al usuario
en uno o mas conjuntos de resultados. Un conjunto de resultados es un arreglo tabular de los datos que se recupera al
ejecutarse el comando SELECT. Al igual que una tabla, el conjunto de resultados posee filas y columnas. Este tema
proveer de una vista general de los principales componentes del comando SELECT, y de cmo estos componentes
pueden ser usados para recuperar datos especficos desde una base de datos SQLServer.

Los Fundamentos del comando SELECT

Un comando SELECT en Transact-SQL permite recuperar datos desde una base de datos SQL Server. La mayora de los
comandos SELECT incluyen cuatro propiedades primarias del conjunto de resultados:

La columnas a ser incluidas en el conjuntos de resultados.


Las tablas de donde se grabarn los datos del conjunto de resultados
Las condiciones que las filas de las tablas fuentes deben cumplir para ser incluidas en el conjunto de resultado.
El ordenamiento de las filas en el conjunto de resultados.

Por ejemplo, el siguiente comando SELECT recupera el ID, nombre y precio unitario de cualquier producto cuyo precio
unitario supere los $40:

SELECT ProductoID, ProductoNombre, PrecioUnit


FROM Productos
WHERE PrecioUnit > 40
ORDER BY PrecioUnit ASC

En este ejemplo, la clusula SELECT define qu columnas debern ser recuperados y la clusula FROM identifica la tabla
que contiene estas columnas La clusula WHERE limita las filas que sern incluidas en el conjunto de resultados a
aquellos productos que tengan un valor de PrecioUnit mayor a $40. Por ltimo, la clusula ORDER BY especifica que el
conjunto de resultados estar ordenado de manera ascendente segn el valor de la columna PrecioUnit.
La sintaxis completa del comando SELECT es compleja, pero las principales clusulas se pueden resumir como sigue:

SELECT lista_de_seleccin
[INTO nueva_tabla]
FROM lista_de_tablas
[WHERE condiciones_de_bsqueda]
[GROUP BY lista_de_agrupamientos]
[HAVING condiciones_de_bsqueda]
[ORDER BY lista_de_ordenamiento [ASC | DESC] ]

En el resto de este tema se ver cada clusula en detalle, junto a ejemplos sobre como definir estas clusulas para
recuperar datos especficos desde una base de datos SQL Server.

La clusula SELECT

La clusula SELECT incluye la palabra clave SELECT y la lista de seleccin. La lista de seleccin es una serie de
expresiones separadas por comas. Cada expresin define una columna del conjunto de resultado. Las columnas en el
conjunto de resultados estarn en el mismo orden que la secuencia de expresiones en la lista de seleccin.
Usar palabras claves en la lista de seleccin.
La lista de seleccin puede tambin contener palabras claves que controlen el formato final del conjunto de resultados.

La palabra clave DISTINCT

La palabra clave DISTINCT elimina filas duplicadas del conjunto de resultados. Por ejemplo, la tabla Ordenes en la base

http://www.sqlmax.com/centro/moduloIII_2.asp?MX= (1 de 4)20/11/2007 04:05:32 a.m.


SQL SERVER Manual en Linea - Modulo 3 / 2

de datos Northwind contiene valores duplicados en la columna CiudadVenta. Para obtener una lista con los valores
duplicados de la columna CiudadVenta removidos, ingrese el siguiente cdigo:

SELECT DISTINCT CiudadVenta, RegionVenta


FROM Ordenes
ORDER BY CityVenta

La palabra clave TOP n

La palabra clave TOP n especifica que solo sern devueltas las primeras n filas del conjunto de resultados. Si se
especifica ORDER BY, las filas son seleccionadas despus que el conjunto de resultados se ordena. El valor n indica el
nmero de filas a ser retornadas (siempre que la palabra clave PERCENT no sea indicada). PERCENT especifica que n es
el porcentaje de filas en el conjunto de resultados que se retornarn. Por ejemplo el siguiente comando SELECT retorna
las primeras 10 ciudades en orden alfabtico de la tabla Ordenes:

SELECT DISTINCT TOP 10 CiudadVenta, RegionVenta


FROM Ordenes
ORDER BY CityVentas

La palabra clave AS

Se puede mejorar la comprensin de un comando SELECT dando a la tabla un alias. Se puede asignar un alias de tabla
usando o no la palabra clave AS:

nombre_tabla AS alias_tabla
nombre_tabla alias_tabla

En el ejemplo siguiente, el alias p se asigna a la tabla Editores:

USE pubs
SELECT p.ed_id, p.ed_nonmbre
FROM editores AS p

IMPORTANTE

Si se asigna un alias a una tabla, toda referencia explcita a la tabla en un comando Transact-SQL debe usar el alias, en
vez del nombre de la tabla.

Tipos de informacin en la lista de seleccin

Una lista de seleccin puede incluir muchos tipos de informacin, tal como una expresin simple o una subconsulta
escalar. Los ejemplos siguientes muestran varios de los tems que se pueden incluir en las listas de seleccin:

SELECT Nombre + ' ' + Apellido AS "Nombre_Empleado",


IDENTITYCOL AS "ID_Empleado",
Telefono_casa,
Region
FROM Northwind.dbo.Empleados
ORDER BY Apellido, Nombre ASC

En este ejemplo, los apellidos y los nombres de los empleados son combinados en una columna. Un espacio se inserta
entre el nombre y el apellido. El nombre de la columna que contendr los nombres de los empleados ser
Nombre_Empleado. El conjunto de resultados tambin incluir la columna de identificacin llamada ID_Empleado; la
columna Telefono_casa; y la columna Region. El conjunto de resultado se ordenar primero por apellido y despus por
nombre.

La clusula INTO

La clusula INTO habilita para especificar que el conjunto de resultados se utilizar para crear una tabla nueva con el
nombre definido en la clusula. El comando SELECT...INTO se utiliza para combinar datos de varias tablas o vistas en
una nueva tabla. Se puede usar para crear una tabla nueva desde un servidor conectado. El ejemplo utiliza un comando
SELECT para recuperar valores desde las columnas Apellido y Nombre de la tabla Empleados:

SELECT Nombre, Apellido

http://www.sqlmax.com/centro/moduloIII_2.asp?MX= (2 de 4)20/11/2007 04:05:32 a.m.


SQL SERVER Manual en Linea - Modulo 3 / 2

INTO NombresEmpleados
FROM Empleados

El comando crea una nueva tabla llamada NombresEmpleados y guarda en ella el conjunto de resultados generado. La
nueva tabla contendr las columnas Nombre y Apellido, y estas columnas contendrn los valores de la tabla Empleados.
El conjunto de resultados no se muestra en el panel Results a no ser que especficamente se consulte la nueva tabla.

La clusula FROM

La clusula FROM se requiere en todo comando SELECT que recupere datos de tablas o vistas. Se usa la clusula FROM
para listar las tablas y vistas que contienen las columnas referenciadas en la lista de seleccin y en la clusula WHERE.
Se pueden asignar alias a las tablas y vistas mediante el uso de la clusula AS. Se puede utilizar, adems, la clusula
FROM para unir tablas especificando las condiciones de unin en la clusula JOIN.
La clusula FROM es una lista separada por comas de nombres de tablas, vistas y de clusulas JOIN. El comando SELECT
usa la clusula FROM para especificar la tabla Vendedores:

SELECT *
FROM Vendedores

Por otra parte, se puede usar la clusula FROM para especificar combinaciones entre dos tablas o vistas, lo que se
discutir mas adelante en detalle.

Las clusulas WHERE, GROUP BY, y HAVING

Las clusulas WHERE y HAVING en un comando SELECT controlan qu filas de las tablas fuentes sern usadas para
construir el conjunto de resultados. Las clusulas WHERE y HAVING son filtros. Especifican una serie de condiciones de
bsqueda, y solo se utilizan para construir el conjunto de resultados aquellas filas que satisfacen las condiciones de
filtro. Se dice que estas filas califican para participar del conjunto de resultados. Por ejemplo, la clusula WHERE en el
siguiente comando

SELECT retornar solo aquellas filas cuyo valor para la regin sea Washington:
SELECT IDCliente, NombreCompaia
FROM Northwind.dbo.Clientes
WHERE Region = 'WA'

La clusula HAVING se usa tpicamente en conjuncin con la clusula GROUP BY, an cuando se puede especificar sin la
clusula GROUP BY. La clusula HAVING especifica filtros adicionales y posteriores a los aplicados por la clusula
WHERE. El siguiente comando SELECT incluye una clusula WHERE, una clusula GROUP BY, y una clusula HAVING:

SELECT OrdD1.OrdenID AS OrdenID,


SUM(OrdD1.Cantidad) AS "Ventas_Unidas",
SUM(OrdD1.PrecioUnitario * OrdD1.Cantidad) AS Precio
FROM [Detalle_Orden] AS OrdD1
WHERE OrdD1.OrdenID in (SELECT DISTINCT OrdD2.OrdenID
FROM [Detalle_Orden] AS OrdD2
WHERE OrdD2.Precio_Unitario > $100)
GROUP BY OrdD1.OrdenID
HAVING SUM(OrdD1.Cantidad) > 100

En este comando SELECT, la clusula WHERE retornar solo aquellas rdenes que incluyan un producto con un precio
unitario mayor a $100, y la clusula HAVING incorpora una restriccin adicional tomando aquellas rdenes que incluyen
ms de 100 unidades. La clusula GROUP BY limitar las filas a valores distintos de la columna OrdenID.

La clusula GROUP BY

La clusula GROUP BY se utiliza para producir valores agregados para cada fila en el conjunto de resultados. Cuando no
se usa la clusula GROUP BY, las funciones de agregacin retornan un solo valor para un comando SELECT.
La palabra clave GROUP BY se sigue de una lista de columnas, conocidas como columnas de agrupamiento. La clusula
GROUP BY restringe las filas del conjunto de resultados. Habr una sola fila para cada valor distinto de la o las columnas
de agrupamiento. Cada fila del conjunto de resultados contendr datos resumidos relacionados con el valor especfico de
la columna de agrupamiento.
SQL Server tiene restricciones sobre los tems que pueden ser especificados en la lista de seleccin cuando un comando
SELECT contiene una clusula GROUP BY. La lista de seleccin puede contener las columnas de agrupamiento y
expresiones que retornen slo un valor para cada valor de las columnas de agrupamiento, tal como funciones de
agregacin que tienen un nombre de columna como uno de sus parmetros
Tpicamente la clusula HAVING se usa con la clusula GROUP BY, aunque no necesariamente.

http://www.sqlmax.com/centro/moduloIII_2.asp?MX= (3 de 4)20/11/2007 04:05:32 a.m.


SQL SERVER Manual en Linea - Modulo 3 / 2

En una clusula GROUP BY, se debe especificar el nombre de la columna de la tabla o vista, no el nombre de la columna
del conjunto de resultados asignada con una clusula AS. Se puede listar ms de una columna en la clusula GROUP BY
para anidar grupos; esto es, se puede agrupar una tabla por una combinacin de columnas.

Cmo se procesan las clusulas WHERE, GROUP BY, y HAVING

Entender la secuencia correcta en la que las clusulas WHERE, GROUP BY, y HAVING se aplican, ayuda a formular
consultas eficientes:

La clusula WHERE se usa para filtrar las filas que resultan de aplicar las operaciones indicadas en la clusula
FROM.
La clusula GROUP BY se aplica para agrupar el resultado de la clusula WHERE.
Por ltimo, la clusula HAVING se utiliza para filtrar las filas del resultado agrupado.

Para cualquier condicin de bsqueda que se podra aplicar indistintamente antes o despus de la operacin de
agrupamiento, es ms eficiente indicarla en la clusula WHERE. Esto reduce el nmero de filas a ser agrupadas. Las
nicas condiciones de filtro que deben ser indicadas en la clusula HAVING son aquellas que deben ser aplicadas
despus que se realicen las operaciones de agrupamiento.

La clusula ORDER BY

La clusula ORDER BY ordena el resultado de una consulta por una o ms columnas (hasta 8060 bytes). Un
ordenamiento puede ser ascendente (ASC) o descendente (DESC). Si no se especifica una ordenamiento, se asume ASC.
Si se indican ms de una columna en la clusula ORDER BY el ordenamiento es anidado.
El siguiente comando ordena las filas en la tabla Titulos, primero por Editor (en orden descendente), luego por tipo (en
orden ascendente dentro de cada editor), y finalmente por precio (en orden ascendente, dado que no se indica DESC):
USE Pubs
SELECT Pub_id, Tipo, Titulo, Precio
FROM Titulos
ORDER BY Pub_id DESC, Tipo, Precio

< Tema 1 Tema 3 >

http://www.sqlmax.com/centro/moduloIII_2.asp?MX= (4 de 4)20/11/2007 04:05:32 a.m.


SQL SERVER Manual en Linea - Modulo 3/3

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO III: Consultar y modificar datos

Tema 3: Usar Tcnicas Avanzadas de Consulta para Acceder a los Datos

Una vez que ha logrado sentirse confortable con los fundamentos del comando SELECT, y est familiarizado con varias
de sus clusulas, Ud. est listo para aprender tcnicas de consultas ms avanzadas. Una de estas tcnicas es la de
combinar el contenidos de una o mas tablas para producir un conjunto de resultados que incorpore filas y columnas de
cada tabla. Otra tcnica es la de usar subconsultas, las cuales se anidan dentro de otros comando SELECT, INSERT,
UPDATE, o DELETE. Subconsultas pueden tambin ser anidadas dentro de otras subconsultas. Se pueden usar los
elementos de Transact-SQL tales con CUBE y ROLLUP para resumir datos.

Usar combinaciones para recuperar datos

Usando combinaciones (joins), se pueden recuperar datos desde dos o ms tablas basados en relaciones lgicas entre
las tablas. Las combinaciones indican cmo el SQL Server utilizar los datos de una tabla para seleccionar las filas en
otra tabla.
Las combinaciones se pueden especificar tanto en la clusulas FROM o WHERE. Las condiciones de combinacin se unen
con las condiciones de bsqueda de las clusulas WHERE y HAVING para controlar qu filas sern seleccionadas desde
las tablas base referenciadas en la clusula FROM. Especificar las condiciones de combinacin en la clusula FROM, sin
embargo, sirve para separarlas de cualquier otra condicin que podra ser especificada en una clusula WHERE y se
recomienda para especificar combinaciones.
Cuando se referencian mltiples tablas en una sola consulta, todas las columnas referenciadas deben ser indicadas de
manera no ambigua. El nombre de la tabla debe ser utilizado para calificar cualquier nombre de columna que est
duplicado en dos o ms tablas referenciadas en una consulta simple.
La lista de seleccin para una combinacin puede referenciar a todas las columnas de las tablas combinadas o a
cualquier subconjunto de columnas. No se requiere que la lista de seleccin contenga las columnas de todas las tablas
en la combinacin. Por ejemplo, en una combinacin de tres tablas, una tabla puede ser utilizada como puente desde
una de las otras tablas a la tercera tabla, y no ser referenciada en la lista de seleccin ninguna de las columnas de la
tabla puente
Aunque las condiciones de combinacin utilizan generalmente el operador de comparacin igual (=), se puede
especificar cualquier otro operador relacional, as como otros predicados.
Cuando SQL Server procesa combinaciones, el motor de consultas elige el mtodo ms eficiente (de entre varias
posibilidades) para procesar la combinacin. Aunque la ejecucin fsica de varias combinaciones usa diferentes caminos,
se respeta la siguiente secuencia lgica:

Se aplican las condiciones de combinacin de la clusula FROM.


Se aplican las condiciones de combinacin y las condiciones de bsqueda de la clusula WHERE.
Se aplican las condiciones de bsqueda de la clusula HAVING.

Esta secuencia puede, algunas veces, influenciar el resultado de la consulta si se mueven las condiciones entre la
clusulas FROM y WHERE.
Las columnas usadas en las condiciones de combinacin, no necesariamente deben tener el mismo nombre o el mismo
tipo de datos. Si los tipos de datos no son idnticos, sin embargo, deben ser compatibles o ser tipos que SQL Server
pueda convertir de manera implcita. En caso que los tipos de datos no puedan ser convertidos de manera implcita, la
condicin de combinacin debe explcitamente convertir los tipos de datos usando la funcin CAST.

NOTA

La mayora de las combinaciones pueden ser reescritas como subconsultas (una consulta anidada dentro de otra
consulta), y muchas subconsultas pueden ser reescritas como combinaciones. Veremos subconsultas en detalle mas
adelante.
Muchas combinaciones pueden ser categorizadas como combinaciones inner o outer. Las combinaciones inner retornan
las filas slo cuando existe al menos una fila en ambas tablas que cumplen con la condicin de combinacin, eliminando
las filas que no se asocian a otra fila en la otra tabla. Las combinaciones outer, sin embargo, retornan todas las filas
desde al menos una tabla o vista, mencionada en la clusula FROM, siempre que esa fila cumpla con las condiciones de
bsqueda de las clusulas WHERE y HAVING.

Combinaciones Inner

http://www.sqlmax.com/centro/moduloIII_3.asp?MX= (1 de 5)20/11/2007 04:05:35 a.m.


SQL SERVER Manual en Linea - Modulo 3/3

Una combinacin inner es una combinacin en la cual los valores de las columnas a ser combinadas son comparados a
travs de un operador de comparacin. En el SQL-92 estndar, las combinaciones inner pueden ser especificadas tanto
en las clusulas FROM o WHERE. Las combinaciones inner son el nico tipo de combinacin que el SQL-92 soporta en la
clusula WHERE. Combinaciones inner establecidas en la clusula WHERE son conocidas como combinaciones al viejo
estilo.
El siguiente comando SELECT usa una combinacin inner para recuperar datos desde la tabla Editores y la tabla Titulos
en la base de datos Pubs.

SELECT t.Titulo, p.Ed_Nombre


FROM Editores AS p INNER JOIN Titulos AS t
ON p.Ed_id = t.Ed_id
ORDER BY Titulo ASC

Este comando SELECT recupera datos desde la columna Titulo en la tabla Titulos (t) y desde la columna Ed_Nombre en
la tabla Editores (p). Dado que este comando utiliza una combinacin inner, esta retornar slo aquellas columnas que
tengan un valor igual en las columnas de la combinacin (la columna p.Ed_id y la t.Ed Publishers).

Combinaciones Outer

SQL Server soporta tres tipos de combinaciones outer: izquierda (left), derecha (right), y completa (full). Todas las filas
recuperadas desde la tabla izquierda son referenciadas con una combinacin outer izquierda, y todas las filas de la tabla
derecha son referenciadas en una combinacin outer derecha. Todas las filas de ambas tablas son retornadas en una
combinacin outer completa.

Usar combinaciones outer izquierdas

Un conjunto de resultados generado por un comando SELECT que incluye una combinacin outer izquierda incluye todas
las filas de la tabla referenciada a la izquierda del LEFT OUTER JOIN. Las nicas filas de la tabla de la derecha que se
recuperarn sern aquellas que cumplan con la condicin de la combinacin.
En el siguiente comando SELECT, se usa una combinacin outer izquierda para recuperar los apellidos y nombres de los
autores y (cuando corresponda) los nombres de cualquier editor que se encuentre en la misma ciudad que el autor:

USE Pubs
SELECT a.Au_nombre, a.Au_apellido, p.Ed_nombre
FROM Autores a LEFT OUTER JOIN Editores p
ON a.Ciudad = p.Ciudad
ORDER BY p.Ed_nombre ASC, a.Au_apellido ASC, a.Au_nombre ASC

El conjunto de resultados para esta consulta listar el nombre de todos los autores de la tabla Autores. El conjunto de
resultados incluir slo aquellos editores que se encuentren en las mismas ciudades de los autores. Si un editor no se
encuentra en la ciudad del autor, un valor nulo es retornado para la columna Ed_nombre del conjunto de resultados.

Usar combinaciones outer derecha

Un conjunto de resultados generado por un comando SELECT que incluye una combinacin outer derecha incluir todas
las filas de la tabla referenciada a la derecha del RIGHT OUTER JOIN. Las nicas columnas que sern recuperadas de la
tabla izquierda sern aquellas que cumplan con la condicin de la combinacin.
En el siguiente comando SELECT, se usa una combinacin outer derecha para obtener la lista de editores y los nombres
y apellidos de los autores, si estos autores se encuentran en la misma ciudad de los editores:

USE Pubs
SELECT a.Au_nombre, a.Au_apellido, p.Ed_nombre
FROM Autores a RIGHT OUTER JOIN Editores p
ON a.Ciudad = p.Ciudad
ORDER BY p.Ed_nombre ASC, a.Au_apellido ASC, a.Au_nombre ASC

El conjunto de resultados de esta consulta listar los nombre de todos los editores de la tabla Editores. El conjunto de
resultados incluir solo aquellos autores que se encuentren en la misma ciudad del editores. Si un autor no se encuentra
en la ciudad del editor, un valor nulo se retorna para las columnas Au_apellido y Au_ nombre del conjunto de resultados.

Usar combinaciones outer completas

Un conjunto de resultados generado por un comando SELECT que incluya una combinacin outer completa incluir todas
las filas desde ambas tablas, sin tener en cuenta si los valores cumplen con la condicin de la combinacin.
En el siguiente comando SELECT, s usa una combinacin outer completa para obtener la lista de los editores y los

http://www.sqlmax.com/centro/moduloIII_3.asp?MX= (2 de 5)20/11/2007 04:05:35 a.m.


SQL SERVER Manual en Linea - Modulo 3/3

nombres y apellidos de los autores:

USE Pubs
SELECT a.Au_nombre, a.Au_apellido, p.Ed_nombre
FROM Autores a FULL OUTER JOIN Editores p
ON a.Ciudad = p.Ciudad
ORDER BY p.Ed_nombre ASC, a.Au_apellido ASC, a.Au_nombre ASC

El conjunto de resultados de esta consulta listar el nombre de todos los editores de la tabla Editores y todos los autores
de la tabla Autores. Si un autor no se encuentra ubicado en la misma ciudad del editor, un valor nulo se retorna en la
columnas Au_apellido y Au_nombre del conjunto de resultados. Si un editor no se encuentra en la misma ciudad del
autor, se retorna un valor nulo en la columna Ed_nombre del conjunto de resultados. Cuando se cumple la condicin
todas las columnas del conjunto de resultados tendrn un valor.

Definir subconsultas dentro del comando SELECT

Una subconsulta es un comando SELECT que retorna un valor simple y se encuentra anidado dentro de un comando
SELECT, INSERT, UPDATE, o DELETE o dentro de otra subconsulta. Una subconsulta puede usarse en cualquier lugar en
que una expresin lo permita.
En el ejemplo siguiente, se anida una subconsulta en la clusula WHERE de un comando SELECT:

USE Northwind
SELECT NombreProducto
FROM Productos
WHERE PreciioUnit =
(
SELECT PrecioUnit
FROM Productos
WHERE NombreProducto = 'Sir Rodney''s Scones'
)

El comando SELECT embebido primero ubica el valor de PrecioUnit de los Sir Rodney's Scones, el cual es de $10. Este
valor ($10) se usa luego en el comando SELECT exterior para obtener los nombres de los productos que tienen el mismo
precio unitario.
Si una tabla figura solo en la subconsulta y no en la consulta exterior, las columnas de esta tabla no pueden ser
incluidas en el resultado de la consulta exterior.
En algunos comandos Transact-SQL, la subconsulta puede ser evaluada como una consulta independiente.
Conceptualmente, el resultado de una subconsulta se sustituye dentro de la consulta exterior (an cuando no sea
necesariamente cmo SQL Server resuelve los comandos Transact-SQL que tienen subconsultas)

Tipos de subconsultas

Las subconsultas se pueden definir en muchos lugares dentro de un comando SELECT. Sin embargo, los comandos que
incluyen subconsultas generalmente adoptan uno de los siguientes formatos:

WHERE <expresin> [NOT] IN (<subconsulta>)


WHERE < expresin > <operador_de_comparacin> [ANY | ALL] (<subconsulta>)
WHERE [NOT] EXISTS (<subconsulta>)

Subconsultas que se usan con IN o con NOT IN

El resultado de una subconsulta introducida con IN (o con NOT IN) es una lista de cero o ms valores. Despus que la
subconsulta devuelve el resultado, la consulta exterior lo utiliza.
En el ejemplo siguiente. Una subconsulta se anida dentro de la clusula WHERE, usando la palabra clave IN:

USE Pubs
SELECT Ed_nombre
FROM Editores
WHERE Ed_id IN
(
SELECT Ed_id
FROM Titulos
WHERE Tipo = 'negocios'
)

Se puede evaluar este comando en dos pasos. Primero, la subconsulta retorna los nmeros de ID de los editores que

http://www.sqlmax.com/centro/moduloIII_3.asp?MX= (3 de 5)20/11/2007 04:05:35 a.m.


SQL SERVER Manual en Linea - Modulo 3/3

han publicado libros de negocios. Luego estos valores son sustituidos en la consulta exterior. la cual encuentra los
nombres que igualan estos nmeros de identificacin. Primero, la subconsulta retorna los nmeros de identificacin de
los editores que tienen libros de negocios publicados. Segundo, estos valores se sustituyen en la consulta exterior, la
cual encuentra los nombres de los editores que tienen nmeros de identificacin dentro del conjunto de resultados de la
subconsulta en la tabla Editores.
Las subconsultas introducidas con la palabra clave NOT IN tambin retornan una lista de cero o ms valores. La consulta
trabaja exactamente igual que una con IN, excepto que con NOT IN se seleccionan a todos aquellas filas cuyos valores
en la columna de comparacin (Ed_in en este caso) no se encuentren del conjunto de resultados de la subconsulta.

Subconsultas que son usadas con operadores de comparacin

Los operadores de comparacin que introduce una subconsulta se pueden modificar con las palabras claves ALL o ANY.
La palabra clave SOME del SQL-92 estndar es equivalente a ANY. Las subconsultas introducidas con un operador de
comparacin modificado retornan una lista de cero o ms valores y pueden incluir una clusula GROUP BY o HAVING.
Estas consultas pueden tener la clusula EXISTS.
Las palabras clave ALL y ANY comparan un valor escalar con un conjunto de valores simples. La palabra clave ALL indica
que se debe aplicar a todos los valores, mientras que ANY indica que al menos a un valor.
En el siguiente ejemplo, el operador de comparacin mayor que (>) es usado con ANY:

USE Pubs
SELECT Titulo
FROM Titulos
WHERE Adelanto > ANY
(
SELECT Adelanto
FROM Editores INNER JOIN Titulos
ON Titulos.Ed_id = Editores.Ed_id
AND Ed_nombre = 'Algodata Infosystems'
)

Este comando encuentra los ttulos que reciben un adelanto mayor que el mnimo adelanto pagado por Algodata
Infosystems. La clusula WHERE en el comando SELECT exterior contiene una subconsulta que usa una combinacin
para recuperar monto de adelantos para Algodata Infosystems. El mnimo adelanto es utilizado para determinar que
ttulos obtener de la tabla Titulos.

Subconsultas que se usan con EXISTS y NOT EXISTS

Cuando se introduce una subconsulta con la palabra clave EXISTS. Esta funciona como un test de existencia. La clusula
WHERE de la consulta exterior comprueba por la existencia de las filas retornadas por la subconsulta. La subconsulta en
realidad no produce ningn dato, solo retorna un valor de TRUE o FALSE.
En el siguiente ejemplo, la clusula WHERE en el comando SELECT exterior contiene una subconsulta que usa EXISTS:

USE Pubs
SELECT Ed_nombre
FROM Editores
WHERE EXISTS
(
SELECT * FROM Titulos
WHERE Titulos.Ed_id = Editores.Ed_id
AND Tipo = 'negocios'
)

Para determinar el resultado de esta consulta, se toma cada fila de la tabla Editores y se verifica que exista dentro de las
filas de la base titulo que sean de ese editor (Titulos.Ed_id = Editores.Ed_id) y el tipo sea "negocios". Si existe algn
ttulo que cumpla, el nombre de ese editor figurar en el conjunto de resultados.
La palabra clave NOT EXISTS trabaja como EXISTS, excepto que la clusula WHERE que tiene NOT EXIST ser satisfecha
solo si la subconsulta no devuelve ninguna fila.
Resumir datos
Transact-SQL incluye varios elementos que lo habilitan para generar reportes simples resumidos. Se pueden usar los
operadores CUBE o ROLLUP, los que son parte de la clusula GROUP BY del comando SELECT. Tambin se pueden usar
los operadores COMPUTE o COMPUTE BY, los que tambin se asocian a la clusula GROUP BY.
Los operadores COMPUTE y COMPUTE BY se mantienen por compatibilidad con versiones anteriores.

Usar el operador CUBE para resumir datos

El operador CUBE genera un conjunto de resultados que es un cubo multidimensional. Un cubo multidimensional es una

http://www.sqlmax.com/centro/moduloIII_3.asp?MX= (4 de 5)20/11/2007 04:05:35 a.m.


SQL SERVER Manual en Linea - Modulo 3/3

expansin de datos sobre sucesos, o datos que registran eventos individuales. La expansin est basada sobre columnas
que el usuario desea analizar. Estas columnas son llamadas dimensiones. El cubo es un conjunto de resultados
conteniendo un tabla cruzada de todas las combinaciones posibles.
El siguiente comando SELECT usa al operador CUBE en la clusula GROUP BY:

USE Pubs
SELECT SUBSTRING(Titulo, 1, 65) AS Titulo,
SUM(cant) AS 'Cantidad'
FROM Ventas INNER JOIN Titulos
ON Ventas.Titulo_id = Titulos.Titulo_id
GROUP BY Titulo
WITH CUBE
ORDER BY Titulo

Este comando SELECT cubre una relacin uno a muchos entre los ttulos de los libros y las cantidades vendidas de cada
uno. Al usar el operador CUBE, el comando devuelve una columna extra. La columna extra (la cual contiene un valor
nulo en la columna Titulo del conjunto de resultados) representa a todos los valores en la columna Titulo de la tabla
Titulos. El conjunto de resultado devuelve los valores para la cantidad vendida de todos los ttulos. En este caso, usar el
operador CUBE o el operador ROLLUP retorna el mismo resultado.

Usar el operador ROLLUP para resumir datos

El operador ROLLUP es til para generar reportes que contienen subtotales y totales. El operador ROLLUP genera un
conjunto de resultados que es similar al conjunto de resultados del operador CUBE. Las diferencias entre los operadores
CUBE y ROLLUP son las siguientes:

CUBE genera un conjunto de resultados mostrando agregaciones para todas las combinaciones de valores en las
columnas seleccionadas.
ROLLUP genera un conjunto de resultados mostrando agregaciones para jerarquas en las columnas seleccionadas.

El siguiente comando SELECT contiene un operador ROLLUP en la clusula GROUP BY:

USE Pubs
SELECT Ed_nombre, Au_apellido, Titulo, SUM(cant) AS 'Sum'
FROM Autores a INNER JOIN TituloAutor ta
ON a.Au_id = ta.Au_id INNER JOIN Titulos t
ON t.Titulo_id = ta.Titulo_id INNER JOIN Editores p
ON p.Ed_id = t.Ed_id INNER JOIN Ventas s
ON s.Titulo_id = t.Titulo_id
GROUP BY Ed_nombre, Au_apellido, Titulo
WITH ROLLUP

Al usar el operador ROLLUP, se pueden crear agrupamientos en el conjunto de resultados. Para las filas agrupadas, se
usa un valor nulo para representar todos los valores para la columna (excepto la columna Sum). Si se usa un comando
SELECT sin el operador ROLLUP, el comando generar los siguientes datos cuando se listen las columnas Ed_nombre,
Au_nombre, y Titulo (en ese orden) en la clusula GROUP_BY:

Cantidad de cada ttulo que cada editor vendi para cada autor.
Cantidad de todos los ttulos que cada editor vendi
Cantidad total de todos los ttulos vendidos por todos los editores para todos los autores.

< Tema 2 Tema 4 >

http://www.sqlmax.com/centro/moduloIII_3.asp?MX= (5 de 5)20/11/2007 04:05:35 a.m.


SQL SERVER Manual en Linea - Modulo 3/4

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO III: Consultar y modificar datos

Tema 4: Modificar datos en una Base de Datos SQL Server

Un componente esencial de un sistema de bases de datos es la capacidad para modificar los datos que se encuentran
almacenados dentro del sistema. SQL Server soporta mtodos para agregar filas de datos a las tablas de una base de
datos SQL Server, cambiar los datos en las filas existentes, y eliminar filas.

Insertar datos en un base de datos SQL Server

SQL Server varios mtodos para insertar datos a una base de datos:

El comando INSERT
El comando SELECT...INTO
El comando WRITETEXT y varias opciones en la API (Application Programming Interface) de la base de datos, que
se pueden usar para agregar texto e imgenes a una fila.

NOTA

Un comando INSERT trabaja tanto sobre tablas como sobre vistas (con algunas restricciones).

Usar el comando INSERT para agregar datos

El comando INSERT agrega una o ms nuevas filas a una tabla. En un tratamiento simplificado, el comando INSERT
toma la siguiente forma:

INSERT [INTO] tabla_o_vista [(lista_de_columnas)] valores_de_datos

Este comando hace que los valores de los datos (valores_de_datos) sean insertados como una o mas filas en la tabla o
vista. La lista de los nombres de columnas (lista_de_columnas), separadas por comas, se usan para especificar las
columnas que recibirn los datos. Si no se indican columnas, todas las columnas de la tabla o vista recibirn datos. Si
solo se indica una lista parcial de columnas, el resto de las columnas recibirn un valor nulo o el valor configurado por
defecto para esa columna, en caso que lo tenga.
Adems, no se deben asignar valores a los siguientes tipos de columnas, dado que SQL Server genera automticamente
este valor.

Columnas con la propiedad IDENTITY


Columnas con una definicin DEFAULT que use la funcin NEWID()
Columnas computadas

NOTA

La palabra clave INTO en un comando INSERT es opcional y solo se utiliza para clarificar el cdigo.
Los valores ingresados deben coincidir con la lista de columnas. La cantidad de valores provistos debe ser igual a la
cantidad de columnas indicadas en la lista de columnas, y el tipo de dato, precisin, y escala de cada valor debe coincidir
con los de las columnas correspondientes.
Cuando se define un comando INSERT, se puede usar la clusula VALUES para especificar los valores de los datos para
una fila o usar una subconsulta SELECT para especificar los valores para una o ms columnas.

Usar el comando INSERT...VALUES para agregar datos

Una clusula VALUES permite especificar los valores para una fila de la tabla. Los valores son indicados a travs de una
lista de expresiones escalares separadas por comas. Estos valores deben ser implcitamente convertibles al tipo,
precisin y escala de las columnas correspondientes. Si no se especifica la lista de columnas, los datos deben ser

http://www.sqlmax.com/centro/moduloIII_4.asp?MX= (1 de 5)20/11/2007 04:05:38 a.m.


SQL SERVER Manual en Linea - Modulo 3/4

ingresados en el mismo orden que tiene en la definicin de la tabla o vista.


Por ejemplo, suponga que se crea la siguiente tabla en la base de datos Pubs:

USE Pubs
CREATE TABLE NuevosLibros
(
LibroID INT IDENTITY(1,1) NOT NULL,
LibroTitulo VARCHAR(80) NOT NULL,
LibroTipo CHAR(12) NOT NULL
CONSTRAINT [tipolibro_df] DEFAULT ('no informado'),
CiudadEd VARCHAR(50) NULL
)

Una vez creada la tabla, se decide ingresar datos a una fila de la tabla. EL siguiente comando INSERT utiliza la clusula
VALUES para insertar una nueva fila en la tabla NuevosLibros:

USE Pubs
INSERT INTO NuevosLibros (LibroTitulo, CiudadEd)
VALUES ('Life Without Fear', 'Chicago')

En este comando, los valores han sido definidos para la columnas LibroTitulo y CiudadEd. Sin embargo, no es necesario
incluir la columna LibroID en el comando INSERT, dado que la columna LibroID se define con la propiedad IDENTITY,
porque los valores para esa columna se generan automticamente. Adems, al no ingresarse un valor para la columna
TipoLibro, SQL Server automticamente inserta el valor por defecto (no informado) en la columna al ejecutar el
comando.

Usar una subconsulta SELECT para agregar datos

Se puede usar una subconsulta SELECT dentro de un comando INSERT para agregar datos a una tabla desde otra u
otras tablas o vistas. Una subconsulta permite agregar ms de una fila a la vez.

NOTA: Una subconsulta SELECT en un comando INSERT se utiliza para agregar subconjuntos de datos existentes a una
tabla, mientras que la clusula VALUES se usa para guardar datos nuevos en una tabla.

El siguiente comando INSERT usa una subconsulta SELECT para insertar filas en la tabla NuevosLibros:

USE Pubs
INSERT INTO NuevosLibros (LibroTitulo, LibroTipo)
SELECT Titulo, Tipo
FROM Titulos
WHERE Tipo = 'mod_cook'

Este comando INSERT usa la salida de una subconsulta SELECT para proveer los datos que se usarn para ser insertados
en la tabla NuevosLibros.

Usar el comando SELECT...INTO para agregar datos

EL comando SELECT INTO permite crear una nueva tabla y llenarla con el resultado del comando SELECT. Ver Tema 2 de
este mdulo

Agregar datos ntext, text, o imagen a filas ya insertadas

SQL Server incluye varios mtodos para agregar valores ntext, text, o imagen a un fila:

Se pueden especificar relativamente pequeos montos de datos en un comando INSERT de la misma forma que se
especifican datos char, nchar, o binary.
Utilizar el comando WRITETEXT, que permite actualizacin interactiva, y no registrada, de una columna existente
tipo text, ntext, o image. Este comanado sobrescribe completamente cualquier dato preexistente en la columna
que afecta. Un comando WRITETEXT no puede usarse sobre columnas de una vista.
Las aplicaciones ADO (Active Data Object) pueden usar el mtodo AppendChunk para especificar grandes
cantidades de datos tipo ntext, text, o image.
Las aplicaciones OLE DB, por su parte, utilizan la interfase ISequentialStream.
Las aplicaciones ODBC (Open Database Connectivity) usan el SQLPutData para ingresar nuevos valores del tipo
ntext, text, o image.
Por ltimo, las aplicaciones DB-Library usan la funcin Dbwritetext.

http://www.sqlmax.com/centro/moduloIII_4.asp?MX= (2 de 5)20/11/2007 04:05:38 a.m.


SQL SERVER Manual en Linea - Modulo 3/4

Modificar datos en una base de datos SQL Server

Una vez que se crean las tablas y que se ingresan datos, cambiar y actualizar los datos se convierte en una tarea de
mantenimiento diario SQL Server provee varios mtodos para cambiar datos en una tabla existente:

El comando UPDATE
La API de la base de datos y los cursores
El comando UPDATETEXT

Estos procedimientos se pueden tanto a tablas como a vistas (con algunas restricciones)

Usar el comando UPDATE para modificar datos

El comando UPDATE puede cambiar datos en una columna simple, en grupos de columnas, o en todas las columnas de
una tabla o vista. Este comando se puede usar tambin para actualizar filas en un servidor remoto, ya sea usando el
nombre de un servidor conectado o las funciones OPENROWSET, OPENDATASOURCE, y OPENQUERY (siempre y cuando
el proveedor OLE DB usada para acceder al servidor remoto soporte actualizaciones). Un comando UPDATE que
referencia a una tabla o una vista puede cambiar los datos en slo un tabla base por vez.

NOTA
Una actualizacin ser exitosa slo si el nuevo valor es compatible con el tipo de datos de la columna y cumple con
todas las restricciones asociadas a esta.

Las clusulas ms importantes del comando UPDATE son:

SET
WHERE
FROM

Usar la clusula SET para modificar datos.

SET indica que columna ser actualizada y los nuevos valores que se guardarn. Los valores en las columnas indicadas
sern actualizados con los valores provistos en la clusula SET en todas las filas que cumplan con la condicin de
bsqueda especificada en la clusula WHERE. Si no se especifica la clusula WHERE, todas las columnas sern
actualizadas.
Por ejemplo, el siguiente comando UPDATE incluye la clusula SET que incrementa el precio de los libros en la tabla
NuevosLibros un 10 por ciento:

USE Pubs
UPDATE NuevosLibros
SET Precio = Precio * 1.1

En este comando, no se usa la clusula WHERE, por lo que todas las filas sern modificadas (salvo aquellas que tengan
un valor nulo para la columna Precio).

Usar la clusula WHERE para modificar datos

La clusula WHERE realiza dos funciones:

Indica las filas a actualizar


Indica las filas de la tabla fuente que califican para proveer valores de actualizacin cuando se especifica la
clusula FROM.

Si no se indica la clusula WHERE, todas las filas sern actualizadas.


En el siguiente comando UPDATE, la clusula WHERE se utiliza para limitar la actualizacin a slo aquellas filas que
cumplen con la condicin definida en la clusula:

USE Pubs
UPDATE NuevosLibros

http://www.sqlmax.com/centro/moduloIII_4.asp?MX= (3 de 5)20/11/2007 04:05:38 a.m.


SQL SERVER Manual en Linea - Modulo 3/4

SET LibroTipo = 'popular'


WHERE LibroTipo = 'popular_comp'

Este comando cambia el nombre del tipo de libro de aquellas filas con el valor popular_comp por el de popular. Si no se
hubiese puesto la clusula WHERE todos los valores de LibroTipo tomaran el valor popular.

Usar una clusula FROM para modificar los datos

Se puede usar la clusula FROM para traer datos desde una o ms tablas o vistas a la tabal que se quiere actualizar. Por
ejemplo, en el siguiente comando UPDATE, la clusula FROM incluye un inner join que combina los ttulos en las tablas
NuevosLibros y Titulos:

USE Pubs
UPDATE NuevosLibros
SET Precio = Titulos.Precio
FROM NuevosLibros JOIN Titulos
ON NuevosLibros.LibroTitulo = Titulos.Titulo

En este comando, los valores de Precio en la tabla LibrosNuevos se actualizan al mismo valor que la columna Precio de
la tabla Titulos.

Usar APIs y cursores para modificar datos

Las APIs ADO, OLE DB, y ODBC soportan actualizar los datos de la fila actual sobre la que la aplicacin se encuentra
posicionada en un conjunto de resultados. Adems, cuando se usa un cursor del servidor Transact-SQL, se puede
actualizar la fila actual utilizando el comando UPDATE con la clusula WHERE CURRENT OF. Los cambios realizados con
esta clusula slo afectarn a la fila donde se encuentre posicionado el cursor. Este punto se ver ms en detalle en otro
mdulo del Kit.

Modificar datos ntext, text, o image

SQL Server provee varios mtodos para modificar valores del tipo ntext, text, o image en una fila cuando se reemplazan
los valores completos:

Se pueden especificar relativamente pequeos montos de datos en un comando UPDATE de la misma forma que
se modifican datos char, nchar, o binary.
Utilizar los comandos WRITETEXT o UPDATETEXT, para modificar datos ntext, text, o image.
Las aplicaciones ADO (Active Data Object) pueden usar el mtodo AppendChunk para especificar grandes
cantidades de datos tipo ntext, text, o image.
Las aplicaciones OLE DB, por su parte, utilizan la interfase ISequentialStream.
Las aplicaciones ODBC (Open Database Connectivity) usan el SQLPutData para ingresar nuevos valores del tipo
ntext, text, o image.
Por ltimo, las aplicaciones DB-Library usan la funcin Dbwritetext.

SQL Server soporta, adems, actualizaciones de slo una porcin de datos del tipo ntext, text, o image. En DB-Library,
se puede hacer usando la funcin Dbupdatetext. Todas las otras aplicaciones y los scripts Transact-SQL, batches,
procedimientos almacenados y disparadores pueden usar el comando UPDATETEXT para actualizar slo una porcin de
columnas ntext, text, o image.

Eliminar datos de una base de datos SQL Server

SQL Server soporta varios mtodos para eliminar datos de una tabla:

El comando DELETE
APIs y cursores
El comando TRUNCATE TABLE

Usar el comando DELETE para eliminar datos

Un comando DELETE remueve una o ms filas en una tabla o vista. La sintaxis siguiente es una forma simplificada del
comando DELETE:

http://www.sqlmax.com/centro/moduloIII_4.asp?MX= (4 de 5)20/11/2007 04:05:38 a.m.


SQL SERVER Manual en Linea - Modulo 3/4

DELETE tabla_o_vista FROM tabla_fuente WHERE condicion_de_busqueda

En tabla_o_vista se colocan los nombre de la tabla o vista en que sern eliminadas las filas. Sern eliminadas todas las
filas que cumplan con la condicin de bsqueda especificada en la clusula WHERE. Si esta no se indica, se eliminarn
todas las filas de la tabla o vista. La clusula FROM indica tablas, vistas o combinaciones adicionales que se pueden usar
en el predicado de condicin de la clusula WHERE. No se borran las filas de las tablas indicadas en la clusula FROM,
sino slo de la especificada en la clusula DELETE.
Si a una tabla se le eliminan todas tablas las misma permanece en la base de datos de todos modos. Para eliminar la
tabla de la base de datos se debe usar el comando DROP TABLE.
Considere el comando DELETE siguiente:

USE Pubs
DELETE NuevosLibros
FROM Titulos
WHERE NuevosLibros.LibroTitulo = Titulos.Titulo
AND Titulos.Royalty = 10

En este comando, se borrarn aquellas filas de la tabla NuevosLibros con un royalty del 10 por ciento. Este valor de
royalty se toma de la columna royalty de la tabla Titulos.

Usar APIs y Cursores para eliminar datos

Las APIs ADO, OLE DB, y ODBC soportan eliminacin de la fila actual sobre la cual se encuentra posicionada la aplicacin
en el conjunto de resultados. Adems, cuando se usa un cursor del servidor Transact-SQL, se puede eliminar la fila
actual utilizando el comando UPDATE con la clusula WHERE CURRENT OF. Los cambios realizados con esta clusula slo
afectarn a la fila donde se encuentre posicionado el cursor. Este punto se ver ms en detalle en otro mdulo del Kit.

Usar el comando TRUNCATE TABLE para eliminar datos

El comando TRUNCATE TABLE es una forma rpida y no registrada de eliminar todas las filas en una tabla. Este mtodo
es casi siempre ms rpido que un comando DELETE sin condiciones, porque DELETE graba un registro de transacciones
por cada fila eliminada, mientras que TRUNCATE TABLE solo graba registro de liberacin de las pginas de datos
completas. El comando TRUNCATE TABLE inmediatamente libera el espacio ocupado por los datos de la tabla e ndices.
Tambin se liberan las pginas de distribucin de todos los ndices.
El comando TRUNCATE TABLE siguiente elimina todas las filas de la tabla NuevosLibros en la base de datos Pubs:

USE Pubs
TRUNCATE TABLE NuevosLibroswBooks

Como en el caso del comando DELETE, la definicin de la tabla se mantiene en la base de datos despus que se aplica
un comando TRUNCATE TABLE (incluidos sus ndices y objetos asociados). Para eliminar la definicin de la tabla se debe
usar el comando DROP TABLE.

< Tema 3

http://www.sqlmax.com/centro/moduloIII_4.asp?MX= (5 de 5)20/11/2007 04:05:38 a.m.


SQL SERVER Manual en Linea - Modulo 4/1

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO IV: Implementar procedimientos almacenados

TEMA 1: Introduccin a los procedimientos almacenados

Hasta ahora hemos utilizado el Query Analizer (o la herramienta on-line) para ejecutar comandos o grupos de comandos
en el lenguaje Transact SQL. A los grupos de comandos los llamaremos scripts (guiones).

Cuando se ejecuta un script, los comandos son ejecutados por SQL Server para mostrar un conjunto de resultados,
configurar un comportamiento y administrar al servidor o para manipular datos contenidos en una base de datos.

A estos scripts se les puede dar un nombre y guardar como procedimientos almacenados en el SQL Server.
Posteriormente se los puede invocar de diversas maneras, tal como desde el Query Analizer, para que realicen el
procesamiento de los comandos Transact SQL incorporados.

El SQL Server provee una serie de procedimientos almacenados del sistema, algunos de los cuales ya hemos utilizado en
este Kit. Estos procedimientos son guardados en la base de datos Master y contienen comando Transact SQL que
facilitan muchas tareas.

Propsito y ventajas de los procedimientos almacenados

Los procedimientos almacenados proporcionan ventajas de performance, un marco de trabajo, y mayores capacidades
de seguridad. La mejora en el rendimiento se logra a travs de un almacenamiento local (en la base de datos), cdigo
precompilado, y manejo de cachs (almacenamientos temporarios). El marco de programacin se logra a travs de
construcciones comunes de programacin tales como parmetros de entrada/salida y reutilizacin de los procedimientos.
Las capacidades de seguridad incluye encriptacin y limitaciones de privilegios que permiten mantener a los usuarios
fuera de la vista de la estructura de la base de datos subyacente, mientras se los habilita a ejecutar procedimientos
almacenados que actan sobre la base de datos.

Rendimiento

Cada vez que un comando Transact-SQL, o conjunto de comandos, es enviado el servidor para su procesamiento, el
servidor debe determinar si el remitente tiene suficientes privilegios para ejecutar esos comandos y si los comandos son
vlidos. Una vez que los permisos y la sintaxis de los comandos se han verificado, SQL Server construye un plan de
ejecucin para procesar el pedido.

Los procedimientos almacenados son ms eficientes en parte porque el procedimiento es almacenado en el SQL Server
cuando se crea. La sintaxis de los comandos contenidos en un procedimiento almacenado se comprueba que este libre
de errores antes de ser guardado. El nombre del procedimiento almacenado se almacena en la tabla SysObjects,
mientras que el texto del procedimiento se guarda en la tabla SysComments. Por otro lado, invocar al procedimiento
almacenado implica ejecutar un solo comando en vez de cientos de comandos que un procedimiento almacenado podra
contener.

La primera vez que se ejecuta el procedimiento, se crea un plan de ejecucin y se compila al procedimiento almacenado.
Los procesamientos subsecuentes del procedimiento almacenado son mucho ms rpidos ya que el SQL Server no
vuelve a controlar la sintaxis, ni recrea un plan de ejecucin, ni se recompila el procedimiento. Por ltimo se verifica el
cach por si ya existe un plan de ejecucin para ese procedimiento antes de generar un nuevo plan de ejecucin.

La relativa prdida de rendimiento producida por ubicar los planes de ejecucin de los procedimientos almacenados en el
cach de procedimiento se reduce ya que los planes de ejecucin para todos los comandos SQL se guardan ahora en el
cach de procedimientos. Por lo que un comando Transact-SQL tratar de utilizar un plan de ejecucin ya existente en
todos casos posibles.

Marco de programacin

Una vez que se crea un procedimiento almacenado, puede ser llamado todas las veces que sea necesario. Esta
capacidad provee modulacin y habilita la reutilizacin del cdigo. La reutilizacin del cdigo mejora el mantenimiento
de la base de datos al aislar la base de datos de los cambios en las prcticas del negocio. Si las reglas de negocios

http://www.sqlmax.com/centro/moduloIV_1.asp?MX= (1 de 4)20/11/2007 04:05:42 a.m.


SQL SERVER Manual en Linea - Modulo 4/1

cambian en una organizacin, se puede modificar a los procedimientos almacenados para cumplir con las nuevas reglas
de negocio. Todas las aplicaciones que llaman a esos procedimientos almacenados cumplirn con la nuevas reglas, sin
tener que ser directamente modificados.

Tal y como otros lenguajes de programacin, los procedimientos almacenados pueden aceptar parmetros de ingreso,
retornar parmetros de salida, producir informacin de retroalimentacin de la ejecucin en la forma de cdigos de
estatus y texto descriptivo, y llamar a otros procedimientos. Por ejemplo, un procedimiento almacenado puede retornar
un cdigo de estatus a un procedimiento que lo llam para que este procedimiento realice una operacin segn el cdigo
recibido.

Los desarrolladores de software pueden escribir sofisticados en un lenguaje como el C++; luego, se puede utilizar un
tipo especial de procedimiento almacenado, denominado procedimiento almacenado extendido, para invocar al programa
desde dentro del SQL Server.

Ante cualquier tarea simple, se debera escribir un procedimiento almacenado. Mientras ms genrico sea el
procedimiento ms til ser para muchas bases de datos. Por ejemplo; el procedimiento almacenado sp_rename cambia
el nombre de un objeto creado por el usuario, tal como una tabla, una columna o un tipo de datos definido por el usuario
en la base de datos actual, pudindose aplicar a cualquier base de datos.

Seguridad

Otro capacidad importante de los procedimientos almacenados es que mejoran la seguridad a travs de la encriptacin y
el aislamiento. Los usuarios de las bases de datos pueden tener permisos de ejecutar un procedimiento almacenado sin
tenerlos para acceder directamente a los objetos de la bases de datos sobre las que opera el procedimiento almacenado.
Adems un procedimiento almacenado puede ser encriptado cuando se lo crea o modifica inhabilitando a los usuarios a
leer los comandos Transact-SQL contenidos en el procedimiento almacenado. Estas capacidad de seguridad permiten
aislar la estructura de la base de datos del usuario de la base de datos, con la consiguiente ganancia en seguridad.

Categoras de procedimientos almacenados

Existen cinco categoras de procedimientos almacenados: procedimientos almacenados del sistema, procedimientos
almacenados locales, procedimientos almacenados temporarios, procedimientos almacenados extendidos y
procedimientos almacenados remotos.

Procedimientos almacenados del sistema

Los procedimientos almacenados del sistema son guardados en la base de datos Master y son tpicamente identificados
por el prefijo sp_ . Ellos realizan una amplia variedad de tareas para soportar las funciones del SQL Server soportando:
llamadas de aplicaciones externas para datos de las tablas del sistema, procedimientos generales para administracin de
las bases de datos, y funciones de administracin de seguridad. Por ejemplo, se pueden ver los privilegios de una tabla
usando el procedimiento almacenado de catlogo sp_table_privileges. El comando siguiente utiliza este procedimiento
almacenado para mostrar los privilegios de la tabla stores en la base de datos Pubs:

USE Pubs
GO
EXECUTE sp_table_privileges Stores

Una tarea comn de administracin de bases de datos es consultar la informacin acerca de los usuarios y procesos que
se estn ejecutando en una base de datos. Este paso es importante cuando se debe dar de baja la base de datos. El
siguiente comando usa el procedimiento sp_who para mostrar todos los procesos en uso por el usuario LAB1
\Administrator:

EXECUTE sp_who @loginame=LAB1\administrator

La seguridad de base de datos es crtica para la mayora de las organizaciones que almacenan datos privados en su base
de datos. El comando siguiente usa el procedimiento almacenado del sistema sp_validatelogins para mostrar cualquier
usuario y grupo de usuarios Windows NT o Windows 2000 hurfanos que no existan ms y que an tengan entradas en
las tablas del sistema del SQL Server:

EXECUTE sp_validatelogins

Hay cientos de procedimientos almacenados del sistema incluidos con el SQL Server. Para una lista completa de
los procedimientos almacenados, consultar System Store Procedures en SQL Server Books Online.

Procedimientos almacenados locales

http://www.sqlmax.com/centro/moduloIV_1.asp?MX= (2 de 4)20/11/2007 04:05:42 a.m.


SQL SERVER Manual en Linea - Modulo 4/1

Los procedimientos almacenados locales son usualmente almacenados en una base de datos y estn tpicamente
diseados para completar tareas en la base de datos donde residen. Un procedimiento almacenado local se podra crear
tambin para personalizar cdigo de los procedimientos almacenados del sistema. Para crear una tarea personalizada
basada sobre un procedimiento almacenado del sistema, primero copie el contenido del procedimiento almacenado del
sistema y guarde el nuevo procedimiento almacenado y guarde el nuevo procedimiento almacenado como un
procedimiento almacenado local.

Procedimientos almacenados temporarios

Un procedimiento almacenado temporario es similar a un procedimiento almacenado local, pero existe slo hasta que se
cierre la conexin que lo cre o se d de baja el SQL Server, dependiendo del tipo de procedimiento almacenado. Estos
procedimientos tienen una existencia voltil debido a que son creados son almacenados en la base de datos TempDB.
TempDB se recrea cuando se reinicia el servidor; por lo tanto, todos los objetos dentro de la base de datos desaparecen
despus de la base de datos. Los procedimientos almacenados temporarios son muy tiles si Ud. est accediendo a
versiones anteriores del SQL Server que no soportan la reutilizacin de los planes de ejecucin y si no se quiere
almacenar las tareas que sern ejecutadas con distintos parmetros.

Hay tres tipos de procedimiento almacenado temporarios: locales (tambin llamados privados), globales, y
procedimientos almacenados en TempDB. Un procedimiento almacenado temporario local siempre comienza con #, un
procedimiento almacenado temporario global siempre comienza con ##. Mas adelante se explicar como crear cada tipo
de procedimiento almacenado temporario. El alcance de ejecucin de un procedimiento almacenado local esta limitado a
la conexin que lo cre. Todos los usuarios que tienen conexin a la base de datos, sin embargo, pueden ver el
procedimiento almacenado en la ventana del Object Browser del Query Analizer. Dado que se encuentra limitado en su
alcance, no existe la posibilidad de colisin de nombres con otras conexiones que crean procedimientos almacenados
temporarios. Para asegurar unicidad, SQL Server agrega al nombre de un procedimiento almacenado con una serie de
caracteres _ y un nmero nico de conexin. Los privilegios no pueden ser garantizado a otros usuarios para el
procedimiento almacenado temporario. Cuando la conexin que cre el procedimiento almacenado temporario se cerr,
el procediemiento se elimina de la TempDB.

Cualquier conexin para la base de datos puede ejecutar un procedimiento almacenado temporario global. Este tipo de
procedimientos debe tener un nombre nico , dado todas las conexiones pueden ejecutarlo y, cmo todos los
procedimientos almacenados temporarios, este es creado en TempDB. El permiso para ejecutar procedimientos
almacenados es automticamente garantizado al rol pblico y no puede ser cambiado. Un procedimiento almacenado
temporario global es casi tan voltil como los locales. Este tipo de procedimiento es removido cuando la conexin usada
para crear el procedimiento se cierra y cualquier conexin que este ejecutando el procedimiento almacenado es
completada.

Los procedimientos almacenados temporarios creados directamente en la TempDB son diferentes a los procedimientos
almacenados locales y globales en lo siguiente:

Se pueden configurar permisos para ellos.

Existen an despus que la conexin que los cre se terminan

No son removidos hasta que el SQL Server no sea apagado.

Ya que este tipo de procedimiento almacenado se crea directamente en la TempDB, es importante calificar
completamente los objetos de base de datos referenciados por comandos Transact-SQL en el cdigo. Por ejemplo, se
debe referenciar la tabla Authors, la cual es propiedad de dbo en la base de datos Pubs, como pubs.dbo.authors.

Procedimientos almacenados extendidos

Un procedimiento almacenado extendido usa un programa externo, compilado como una DLL, librera de vnculos
dinmicos (dynamic link library) para expandir las capacidades de un procedimiento almacenado. Un nmero de
procedimiento almacenado del sistema son tambin calificados como procedimientos almacenados extendidos. Por
ejemplo, el programa xp_sendmail, el cual enva un mensaje y un archivo de conjunto de resultados de una consulta
adjunto a una direccin especfica de email, es tanto un procedimiento almacenado de sistema como un procedimiento
almacenado extendido. La mayora de los procedimientos almacenados extendidos usan el prefijo xp_ como un
convencin de nombre. Sin embargo, hay algunos procedimientos almacenados extendidos que comienzan con el prefijo
sp_, y hay algunos procedimientos almacenados del sistema que no son procedimientos extendidos y usan el prefijo
xp_. Por lo tanto, no se puede depender sobre convencin de nombres para identificar procedimientos almacenados del
sistema y procedimientos almacenados extendidos.

Se puede usar la funcin OBJECTPROPERTY para determinar si un procedimiento almacenado es extendido o no.
OBJECTPROPERTY retorna un valor de 1 si es un procedimiento extendido (IsExtendedProc), indicando un procedimiento

http://www.sqlmax.com/centro/moduloIV_1.asp?MX= (3 de 4)20/11/2007 04:05:42 a.m.


SQL SERVER Manual en Linea - Modulo 4/1

almacenado extendido, o retorna un valor de 0, indicando que no es un procedimiento extendido. El siguiente ejemplo
demuestra que el sp_prepare es un procedimiento almacenado extendido y que xp_logininfo no es un procedimiento
almacenado extendido:

USE Master

un procedimiento almacenado extendido que usa el prefijo sp_ SELECT OBJECTPROPERTY(object_id(sp_prepare),


IsExtendedProc)

Este ejemplo retorna un valor de 1

USE Master

un procedimiento almacenado que no es extendido y usa el prefijo xp_ SELECT OBJECTPROPERTY(object_id


(xp_logininfo), IsExtendedProc)

Este ejemplo retorna un valor de 0.

< Programa Tema 2 >

http://www.sqlmax.com/centro/moduloIV_1.asp?MX= (4 de 4)20/11/2007 04:05:42 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO IV: Implementar procedimientos almacenados

TEMA 2: Creando, ejecutando, modificando y borrando procedimientos almacenados

Como se guarda un procedimiento

Cuando se crea un procedimiento, SQL Server chequea la sintaxis de los comandos Transact-SQL que incluye. Si la
sintaxis es incorrecta, SQL Server generar un mensaje de error sintax incorrect (sintaxis incorrecta), y el
procedimiento no ser creado. Si el procedimiento pasa el chequeo de sintaxis, el procedimiento se guarda,
escribindose su nombre y otras informaciones (tal como un nmero autogenerado de identificacin) en la tabla
SysObject. El texto usado para crear el procedimiento se escribe en la tabla SysComments de la base de datos
actual.

El siguiente comando SELECT consulta a la tabla SysObjects en la base de datos Pubs para mostrar el nmero de
identificacin del procedimiento almacenado ByRoyalty:

SELECT [name].[id] FROM [pubs].[dbo].[SysObjects]

WHERE [name] = byroyalty

Esta consulta retorna lo siguiente:

name id
byroyalty 581577110

Usando la informacin retornado de la tabla SysObjects, el prximo comando SELECT consulta a la tabla
SysComments al usar el nmero de identificacin del procedimiento almacenado ByRoyalty:

SELECT [text] FROM [pubs].[dbo].[SysComments]

WHERE [id] = 581577110

Esta consulta retorna el texto del procedimiento almacenado, cuyo nmero de identificacin es el 581577110.

Usar el procedimiento almacenado de sistema sp_helptext es una mejor opcin para mostrar el texto usado para
crear un objeto (tal como un procedimiento almacenado no encriptado), dado el texto es retornado en mltiples
filas.

Mtodos para crear procedimientos almacenados

SQL Server provee muchos mtodos que se pueden usar para crear un procedimiento almacenado: el comando
Transact-SQL CREATE PROCEDURE, SQL-DMO (usando el objeto StoredProcedure y escapa alcance de este Kit), a
travs del rbol de consola del Enterprise Manager, el asistente para crear procedimientos almacenados (al cual se
puede acceder a trav del Enterprise Manager).

El comando CREATE PROCEDURE

Se puede usar el comando CREATE PROCEDURE, o su versin abreviada, CREATE PROC, para crear un procedimiento
almacenado en el Query Analyzer o una herramienta de comando como osql. Cuando utiliza CRETE PROC, se pueden
realizar las siguientes tareas:

Especificar agrupamientos de procedimientos almacenados

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (1 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

Definir parmetros de entrada-salida, sus tipos de datos, y sus valores por defecto. Cuando se definen
parmetros de entrada y salida, estos siempre van precedidos por el signo @, seguido del nombre del
parmetro y luego una designacin del tipo de dato. Los parmetros de salida deben incluir la palabra clave
OUTPUT para diferenciarlos de los de entrada.

Usar cdigos de retorno para mostrar informacin acerca del xito o falla de una tarea.

Controlar si un plan de ejecucin debera ser guardado temporariamente (en el cache) para un
procedimiento.

Encriptar el contenido del procedimiento almacenado por razones de seguridad.

Especificar las acciones que deber tomar el procedimiento almacenado cuando se ejecute.

Proveer de contexto a un procedimiento almacenado

Con la excepcin de los procedimiento almacenado temporarios, un procedimiento almacenado se crea siempre en
la base de datos actual. Por lo tanto, Ud. siempre debera especificar la base de datos actual usando el comando
USE nombre_base seguido por el por el comando GO ntes de crear un procedimiento almacenado- Se puede usar la
lista desplegable Cahnge Database en el Query Analizer para seleccionar la base de datos actual.

El script siguiente selecciona la base Pubs y luego crea un procedimientos llamado ListAuthorNames (lista de los
nombres de los autores) , que pertenece a dbo:

USE Pubs

GO

CREATE PROCEDURE [dbo].[ListAuthorNames]

AS

SELECT [au_fname], [aufname] FROM [pubs].[dbo].[authors]

Fjese que el nombre del procedimiento est totalmente calificado en el ejemplo. Un nombre de procedimiento
almacenado totalmente incluye el nombre de su propietario (en este caso dbo) y el nombre del procedimiento,
ListAuthorNames. Se especifica dbo como propietario si se quiere asegurar que la tarea del procedimiento
almacenado correr sin importar la tabla propietaria en la base de datos. El nombre de la base de datos no es parte
del nombre totalmente calificado de un procedimiento almacenado cuando se usa el comando CREATE PROCEDURE.

Crear procedimientos almacenados temporarios

Para crear un procedimiento almacenado temporal local, agregue adelante del nombre del procedimiento el smbolo
#. Este signo numeral instruye al SQL Server para que cree el procedimiento en la TempDB. Para crear un
procedimiento almacenado temporario global, , se agrega adelante del nombre del procedimiento un doble smbolo
numeral ##, que tambin ser creado en la TempDB. SQL Server ignora la base de datos actual cuando crea un
procedimiento temporario. Por definicin, un procedimiento almacenado slo puede existir en la TempDb. Para crear
un procedimiento almacenado directamente en la TempDB que no es ni local ni global haga que la TempDB sea la
base de datos actual y luego cree el procedimiento. El ejemplo siguiente crea un procedimiento almacenado
temporario local, un procedimiento almacenado temporario global y un procedimiento directamente en la TempDB:

crear un procedimiento temporario local

CREATE PROCEDURE #localtemp

AS

SELECT * from [pubs].[dbo].[authors]

GO

crear un procedimiento temporario global

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (2 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

CREATE PROCEDURE #globaltemp

AS

SELECT * from [pubs].[dbo].[authors]

GO

crear un procedimiento almacenado temporario que sea local en tempdb

USE TEMPDB

GO

CREATE PROCEDURE directtemp

AS

SELECT * from [pubs].[dbo].[authors]

GO

Nombres de bases de datos totalmente calificadas son especificadas en los comandos SELECT. Si el procedimiento
no se ejecuta en el contexto de una base de datos especfica, luego nombre de bases de datos totalmente calificadas
aseguran que se est referenciando a la base de datos apropiada.

En el tercer parte del ejemplo, cuando se crea un procedimiento almacenado temporario directamente en la base de
datos TempDB, se debe hacer a la base de datos TempDB la base actual antes de crearlo, o se debe calificar
totalmente el nombre ([TempDb].[dbo].[directtemp]). Tal como los procedimientos almacenados del sistema, que se
guardan en la base Masters, los procedimientos almacenados temporarios locales y globales estn disponibles para
ser usados por su nombre corto (sin importar la base de datos actual).

Agrupar, almacenar temporariamente en memoria y encriptar procedimientos almacenados

Los procedimientos almacenados puedes ser agrupados lgicamente al momento de su creacin. Esta tcnica es
muy til para procedimientos almacenados que deberan ser administrados cono una unidad independiente y que
son usados por una aplicacin especfica. Para agrupar procedimientos almacenados, se debe asignar a cada
procedimiento del grupo el mismo nombre y agregarle un nmero nico separado por un punto y coma. Por
ejemplo: el denominar a dos procedimientos almacenados con ProcAgrupado;1 y ProcAgrupado;2 al momento de su
creacin, los agrupa lgicamente. Cuando se ve el contenido de ProcAgrupado, se ve el cdigo para ambos
ProcAgrupado;1 y ProcAgrupado;2.

Por defecto, un plan de ejecucin de un procedimiento almacenado se guarda en memoria temporal (cacheo) la
primera vez que se ejecuta, y no es cacheado de nuevo hasta que el servidor se reinicie o hasta que la estructura de
una tabla usada por el procedimiento almacenado cambie. Por razones de performance se podra no querer cachear
un plan de ejecucin de un procedimiento almacenado. Por ejemplo, cuando los parmetros de un procedimiento
almacenado varan considerablemente de una ejecucin a la siguiente, cachear un plan de ejecucin es
contraproducente. Para provocar que un procedimiento almacenado sea recomplilado cada vez que se ejecuta,
agregue las palabras claves WITH RECOMPILE cuando crea el procedimiento almacenado. Se puede tambin forzar
una recompilacin mediante el uso del procedimiento almacenado del sistema sp_recompile o especificando WITH
RECOMPILE cuando se ejcuta el procedimiento.

Encriptar un procedimiento almacenado protege su contenido de ser visto. Para encriptar un procedimiento
almacenado, use la palabra clave WITH ENCRYPTION cuando crea el procedimiento. Por ejemplo, el cdigo siguiente
crea un procedimiento encriptado llamado Protected:

USE Pubs

GO

CREATE PROC [dbo].[protected] WITH ENCRYPTION

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (3 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

AS

SELECT [au_fname], [au_lname] FROM [pubs].[dbo].[authors]

Las palabras claves WITH ENCRYPTION encriptan la columna de texto del procedimiento almacenado en la tabla
SysComments. Un modo simple para determinar si un procedimiento almacenado est encriptado es usar la funcin
OBJECTPROPERTY:

controla si el procedimiento almacenado esta encriptado retornando 1 para IsEncrypted

SELECT OBJECTPROPERTY(object_id(protected), IsEncrypted)

O llamando al procedimiento con sp_halptext:

si el procedimiento esta encriptado, retorna The objects comments have been encrypted.

EXEC sp_helptext protected

Un procedimiento almacenado encriptado no puede ser replicado. Despus que un procedimiento almacenado es
encriptado, SQL Server lo desencripta para slo para su ejecucin. Su definicin no puede ser desencriptada para ser
vista por nadie, incluido el propietario del procedimiento almacenado. Por lo tanto, se debe estar seguro que se
cuenta con una copia en algn lugar seguro antes de encriptar un procedimiento almacenado.

Enterprise Manager

Se puede crear un procedimiento almacenado directamente en el Enterprise Managrer. Para ello, se expande el rbol
de la consola para su servidor y luego se expande la base de datos donde se crear el procedimiento almacenado.
Clic derecho sobre el nodo Stored Procedure, y luego clic sobre New Stored Procedure. Cuando aparezca el cuadro
de dilogo Stored Procedure Properties New Stored Procedure se ingresa el contenido del nuevo procedimiento
almacenado. La figura muestra el cuadro de dilogo Stored Procedure Properties New Stored Procedure que
contiene el cdigo del ejemplo anterior.

Se puede, adems, controlar la sintaxis del procedimiento almacenado antes de su creacin y guardar una plantilla
que aparecer siempre que se cree un nuevo procedimiento almacenado y se configuren permisos. Una vez que el
procedimiento almacenado se crea, se puede abrir las propiedades del procedimiento y configurar los permisos. Por
defecto el propietario del procedimiento y el administrador tienen permisos totales sobre el procedimiento
almacenado.

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (4 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

Las plantillas son muy tiles porque proveen un marco de trabajo para crear documentacin consistente sobre los
procedimientos almacenados. Comnmente se agrega texto al encabezamiento que describe como se deber
documentar cada procedimiento almacenado que se crea.

El asistente Create Stored Procedure

El asistente Create Stored Procedure (crear procedimientos almacenados) permite crear nuevos procedimientos
almacenados paso a paso. Se puede acceder al asistente seleccionando Wizars (asistentes) desde el men Tools
(herramientas). En la ventana Select Wizard (seleccionar asistente), expandir la opcin Database (base de datos), y
luego seleccionar Create Stored Procedure Wizard (asistente para crear procedimientos almacenados) y presionar
Ok. A partir de qu se deben completar los pasos indicados por el asistente. La Figura muestra la pantalla de
bienvenida del Create Stored Procedure Wizard mostrando las cosas que se pueden hacer con l.

El asistente Create Stores Procedures lo habilita para que Ud. cree procedimientos que inserten, eliminen, o
actualicen datos en las tablas. Para modificar los procedimientos almacenados que crea el asistente, se puede
editarlos dentro del asistente o utilizar otras herramientas (como el Query Analizer).

Crear y agregar procedimientos almacenados extendidos

Despus de crear un procedimiento almacenado extendido, se debe registrar con SQL Server. Slo los usuarios que
tiene permisos de administrador pueden registrar un procedimiento almacenado con el SQL Server. Para registrar un
procedimiento almacenado extendido, se puede usar el procedimiento del sistema sp_addextendedproc en el Query
analyzer o usar el Enterprise Manager. En el Enterprise Manager, expanda la base de datos Master, clic derecho
sobre el nodo Extended Stored Procedure (procedimiento almacenado extendido), y clic sobre la opcin New
Extended Stored Procedure (nuevo procedimiento almacenado extendido). Los procedimientos almacenados
extendidos slo pueden ser agregados a la base de datos Master.

Resolucin diferida de nombres

Cuando se crea un procedimiento almacenado, SQL Server no controla por la existencia de los objetos que este
pueda referenciar. Esto es as porque es posible que un objeto, tal como una tabla referenciada en un procedimiento
almacenado no existe al momento de la creacin del procedimiento almacenado. Esta capacidad se denomina
resolucin diferida de nombres. La verificacin de la existencia de los objetos se produce al momento de la efectiva
ejecucin del procedimiento.

Cuando se refiere a un objeto (como una tabla) en un procedimiento almacenado se debe asegurar que se especifica
el propietario del objeto. Por defecto, SQL Server asume que el creador del procedimiento almacenado es tambin
el propietario de los objetos referenciados en el procedimiento. Para evitar confusin, considere especificar a dbo
como el propietario de todos objetos (tanto los procedimientos almacenados como los objetos referenciados dentro

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (5 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

de estos).

Ejecutar un procedimiento almacenado

Como ya vimos, se puede correr un procedimiento almacenado en el Query Analyzer simplemente ingresando su
nombre y cualquier parmetro requerido. Por ejemplo se vi el contenido de un procedimiento almacenado
ingresando sp_helptext seguido del nombre del procedimiento almacenado a ser visto. El nombre del procedimiento
almacenado a ser visto es en este caso el valor del parmetro.

Si el procedimiento almacenado no es el primer comando en un batch, para ejecutarlo se debe preceder el nombre
del procedimiento con las palabras claves EXECUTE o EXEC.

Llamar un procedimiento almacenado para ejecucin

Cuando se especifica el nombre de un procedimiento, el nombre puede ser totalmente calificado, tal como
[nombre_base].[propietario].[nombre_proc] o, si la base que contiene al procedimiento es la base actual, mediante
el comando USE, entonces se puede ejecutar el procedimiento almacenado especificando slo [propietario].
[nombre_proc]. Si el nombre de el nombre del procedimiento es nico en la base de datos activa, se puede
simplemente especificar [nombre_proc].

Nota: En este tema se han utilizado los identificadores entre [] en los nombres de los objetos, an cuando dichos
nombres no violan la reglas de nombres de objetos, con fines de claridad de los ejemplos.

Nombres totalmente calificados no son necesarios cuando se ejecutan procedimientos del sistema que tienen el
prefijo sp_, ni para procedimientos almacenados temporarios locales, o globales. SQL Server buscar en la base
Master por cualquier procedimiento almacenado que tenga el prefijo sp_ donde el propietario sea dbo. Para evitar
confusin, no se debe nombrar procedimientos almacenados locales con los mismos nombres de procedimientos
almacenados en la base Master. Si ello ocurre, se debe asegurar que el propietario de la base sea otro que dbo. SQL
Server no busca automticamente en la base master por procedimientos almacenados extendidos, Por lo tanto, o se
lo invoca por su nombre totalmente calificado o se cambia la base actual a la que pertenece el procedimiento.

Especificar parmetros y sus valores

Si un procedimiento almacenado requiere valores de parmetros, se deben especificar cuando se ejecuta el


procedimiento. Cuando se definen parmetros de entrada y salida se los precede del smbolo @, seguido por el
nombre del parmetro y la designacin del tipo de dato. Cuando se los invoca para ser ejecutados, se debe incluir un
valor para el parmetro (y opcionalmente, el nombre del parmetro). Los prximos dos ejemplos corren el
procedimiento almacenado au_info de la base Pubs con dos parmetros: @lastname (apellido) y @firstname
(nombre):

--llama al procedimiento almacenado con los valores de los parmetros

USE Pubs

GO

EXECUTE au_info Green, Marjorie

--llama al procedimiento alamcenado con los valores y nombres de los parmetros

USE Pubs

GO

EXECUTE au_info

Green, Marjorie

@lastname = Green, @firstname = Marjorie

En el primer ejemplo, los valores de los parmetros fueron especificados pero los nombres no. Si se especifican los
valores sin sus correspondientes nombres, los valores se deben indicar en el mismo orden con se especificaron en la

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (6 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

definicin del procedimiento. En el segundo ejemplo, los nombres y los valores son ambos indicados. En este caso,
se los puede poner en cualquier orden. Aquellos parmetros a los que se les especifica un valor por defecto en la
definicin del procedimiento no necesitan ser obligatoriamente especificados cuando se los llama.

La lista siguiente muestra algunas sintaxis opcionales disponibles cuando se ejecuta un procedimiento almacenado:

Un variable de cdigo de retorno de tipo entero (integer) para almacenar valores retornados desde el
procedimiento almacenado. La palabra clave RETURN con un valor (o unos valores) debe ser especificada en el
procedimiento almacenado para que este variable opcional funcione.
Un punto y coma seguida por un nmero de grupo. Para procedimientos almacenados agrupados, se puede o
ejecutar todos los procedimientos en el grupo simplemente especificando el nombre del procedimiento
almacenado, o se puede incluir un nmero para indicar cual procedimiento almacenado se desea ejecutar. Por
ejemplo, si se crean dos procedimientos almacenados llamados ProcAgrupado;1 y ProcAgrupado;2, se puede
correr a ambos ingresando EXEC ProcAgrupado. O, se puede ejecutar el procedimiento 2 escribiendo EXEC
ProcAgrupado;2. Si se definen parmetros en los procedimientos almacenados agrupados, cada nombre de
parmetro debe ser nico en el grupo.
Variables para mantener los parmetros definidos en el procedimiento almacenado. Las variables son definidas
con el uso de la palabra clave DECLARE antes de usar EXECUTE.

Ejecutar procedimiento almacenado cuando arranca SQL Server

Ya sea por razones de performance, administracin, o cumplimiento de tareas, se puede indicar que al arrancar el
SQL Server se ejecuten procedimientos almacenados. Se utiliza para ello el procedimiento almacenado
sp_procoption. Este procedimiento acepta tres parmetros: @ProcName, @OptionName y @OptionValue. El
comando siguiente configura un procedimiento almacenado llamado AutoStart para que arrnque automticamente:

USE Master

GO

EXECUTE sp_procoption

@procname = autostart,

@optionname = startup,

@optionvlue = true

Slo los procedimientos de dbo y ubicados en la base master pueden ser configurados para ejecutarse
automticamente. Para ejecutar al arrancarse el SQL Server a procedimientos ubicados en otras bases debern ser
llamados desde un procedimiento almacenado ubicado en la Master y configurado para arrancar automticamente.
Llamar a un procedimiento desde otro se denomina llamadas anidadas.

Se puede configurar a un procedimiento para que arranque automticamente desde el Enterprise Manager. Se
accede a la base Master, se hace clic en el nodo Stored Procedures. Se selecciona al procedimiento almacenado, y
luego clic derecho. Se abre el cuadro de dilogo Properties (Propiedades) y se marca la casilla de seleccin Execute
Whenever SQL Server Start (ejecutar siempre que el SQL Server arranca).

Para determinar si un procedimiento almacenado arranca automticamente, se puede ejecutar la funcin


OBJECTPROPERTY y controlar la propiedad ExecIsStartup. Por ejemplo el cdigo siguiente invoca a la funcin para
determinar si el procedimiento AutoStart est configurado para ejecutarse automticamente:

USE Master

SELECT OBJECTPROPERTY(object_id(autostart), ExecIsStartup)

Para deshabilitar procedimientos para que no continen ejecutndose automticamente, se puede correr el
procedimiento almacenado sp_configure. El siguiente comando configura al SQL Server para que los procedimientos
almacenados configurados para ejecutarse automticamente no se arranquen la prxima vez que se encienda el SQL
Server:

EXECUTE sp_configure

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (7 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

@configname = scan for startup procs, @configvalue = 0

RECONFIGURE

GO

Modificar procedimientos almacenados

Se puede usar el comando ALTER PROCEDURE (ALTER PROC en su versin abreviada),para modificar el contenido de
un procedimiento almacenado de usuario, utilizando el Query Analyzer o una herramienta de comandos como osql.
La sintaxis del comando ALTER PROCEDURE es casi idntica a la del CREATE PROCEDURE.

La ventaje de usar el comando ALTER PROCEDURE en vez de eliminar el procedimiento y crearlo de nuevo es que
con este comando se retiene la mayora de la propiedades configuradas para el procedimiento, tales como su ID. El
conjunto de permisos, y su bandera de arranque. Para mantener la encriptacin o la configuracin de recompilacin,
se debe especificar con las palabras claves WITH ENCRYPTION o WITH RECOMPILE cuando se ejecuta ALTER
PROCEDURE.

Se puede usar el Enterprise Manager o el Query Analyzer para modificarprocedimientos almacenados de usuario. En
el Enterprise Manager, clic derecho sobre el procedimiento almacenado y luego clic en Properties. En el cuadro de
dilogo Stored Procedure Properties, modifique los comandos del procedimiento que aparecen en la caja Text, y
luego clic en OK. Usando el Query Analyzer, clic derecho en el procedimiento almacenado y clic en Edit. Despus de
modificar un procedimiento almacenado ejectelo.

Para modificar el nombre de un procedimiento almacenado definido por el usuario, se usa el procedimiento
almacenado sp_rename. El comando siguiente renombra el procedimiento almacenado ByRoyalty a
RoyaltyByAuthorID:

USE PUBS

GO

EXECUTE sp_rename

@objname = byroyalty, @newname = RoyaltyByAutorID,

@objtype = object

Procedimientos almacenados definidos por el usuario pueden ser renombrados en el Enterprise Manager haciendo
clic derecho en el nombre del procedimiento almacenado y clic en Rename (renombrar)

Se deber tener cuidado cuando se renombre un procedimiento almacenado u otros objetos, como tablas. Los
procedimientos almacenados pueden ser anidados. Si se produce una llamada a un objeto renombrado, el
procedimiento que llama no podr ubicar al objeto renombrado y generar un mensaje de error.

Eliminar procedimientos almacenados

Se puede usar el comando DROP PROCEDURE, o su versin abreviada DROP PROC, para eliminar un procedimiento
almacenado definido por el usuario, varios procedimientos a la vez o un conjunto de procedimientos agrupados. El
comando siguiente borra dos procedimientos en la base de datos Pubs: Procedure01 y Procedure02:

USE Pubs

GO

DROP PROCEDURE procedure01, procedure02

Fjese que primero se configur a Pubs como la base actual. No se puede especificar un nombre de base de datos
cuando se elimina un procedimiento. El nombre totalmente calificado para eliminar procedimientos es [propietario].
[nombre_procedimiento]. Si se ha creado un procedimiento almacenado del sistema definido por el usuario (con
prefijo sp_), el comando DROP PROC buscar primero en la base actual y luego en la Master.

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (8 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

Para borrar un grupo de procedimientos almacenados, especifique el nombre del procedimiento. No se puede borrar
parte de un grupo de procedimientos almacenados con el comando DROP PROCEDURE. Por ejemplo si se tiene un
grupo de procedimientos llamados ProcAgrupados conteniendo ProcAgrupados;1 y ProcAgrupados;2 no se puede
borrar ProcAgrupados;1 sin borrar ProcAgrupados;2. Si se necesita eliminar un procedimiento dentro de un grupo de
procedimientos, se elimina el grupo y luego se lo recrea sin el procedimiento a eliminar.

Los cuidados indicados al final del punto anterior tambin son vlidos para las operaciones de eliminacin.

< Programa < Tema1 Tema 3 >

http://www.sqlmax.com/centro/moduloIV_2.asp?MX= (9 de 9)20/11/2007 04:05:47 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO IV: Implementar procedimientos almacenados

TEMA 3: Programar procedimientos almacenados

Parmetros y variables

Los parmetros y las variables son una parte fundamental de hacer dinmico a un procedimiento almacenado. Los
parmetros de entrada habilitan al usuario que est ejecutando el procedimiento a pasar valores al procedimiento
almacenado. Los parmetros de salida amplan la salida de los procedimientos almacenados mas all del conjunto de
resultados retornado por una consulta. Los datos desde un parmetro de salida son capturados en memoria cuando el
procedimiento se ejecuta. Para retornar un valor desde el parmetro de salida se debe crear una variable para que lo
mantenga. Se puede mostrar el valor con los comando SELECT o PRINT, o usar el valor para completar otro comando en
el procedimiento.

En resumen, un parmetro de entrada se define en el procedimiento almacenado y un valor es provisto cuando el


procedimiento se ejecuta. Un parmetro de salida se define usando la palabra clave OUTPUT. Cuando se ejecuta el
procedimiento, se guarda en memoria un valor para el parmetro de salida. Para utilizarlo, se declara una variable para
mantener al valor. Los valores de salida tpica de muestran en pantalla una vez que termin la ejecucin del
procedimiento.

El siguiente procedimiento muestra el uso de ambos parmetros, de salida y de entrada:

USE Pubs

GO

CREATE PROCEDURE dbo.SalesForTitle

@Title.varchar(80), --Parmetro de entrada

@YtdSales int OUTPUT, --Primer parmetro de salida

@TitleText varchar(80) OUTPUT Segundo parmetro de salida

AS

-- Asigna la columna de datos a los parmetros de salida y

-- controla por un ttulo que coincida con el parmetro de entrada

SELECT @YtdSales = ytd_sales, @TitleText = title

FROM titles WHERE title LIKE @Title

GO

El parmetro de entrada es @Title (ttulo), y los de salida son @YtdSales y @TitleText. Fjese que los tres parmetros
tienen definidos sus tipos de datos. Los parmetros de salida incluye la palabra clave OUTPUT. Despus que se definen
los parmetros, el comando SELECT utiliza a los tres parmetros. Primero, a los parmetros de salida se les asigna a las
columnas de la consulta. Cuando se ejecuta la consulta, los parmetros de salida contendrn los valores de esas dos
columnas. La clusula WHERE del comando SELECT contiene el parmetro de entrada, @Title. Cuando se ejecuta el
procedimiento, se debe proveer un valor para el parmetro de entrada o fallar la consulta.

El siguiente comando ejecuta el procedimiento almacenado que vimos:

http://www.sqlmax.com/centro/moduloIV_3.asp?MX= (1 de 4)20/11/2007 04:05:50 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

-- Declara variables para recibir las salidas del procedimiento

DECLARE @y_YtdSales int, @t_TitleText varchar(80)

EXECUTE SalesForTitle

-- configura los valores de variables con los parmetros de salida

@YtdSales = @y_YtdSales OUTPUT,

@Titletext = @t_TitleText OUTPUT,

@Title = %Garlic% especifica un valor para el parmetro de entrada

-- Muestra las variables retornadas por el procedimiento

SELECT Title = @t_TitleText, Nmero de Ventas = @y_YtdSales

GO

Se declaran dos variables: @y_YtdSales y @t_TitleText. Estas dos variables recibirn los valores almacenados en los
parmetros de salida. Advierta que el tipo de datos de la variables que reciben son los mismos que los tipos de los
correspondientes parmetros de salida. Estas dos variables pueden tener el mismo nombre que los parmetros de salida
correspondientes dado que las variables en un procedimiento almacenado son locales al batch que las contiene. Por
claridad, los nombres de las variables son diferentes a los de los parmetros de salida. Cuando se declara una variable,
esta no se asigna con un parmetro de salida. Las variables son asignadas con parmetros de salida despus del
comando EXECUTE. Fjese que la palabra OUTPUT se indica cuando el parmetro se asigna a la variable. Si no se
especifica OUTPUT, la variable no puede mostrar los valores en el comando SSELECT al final del cdigo. Por ultimo, el
parmetro de entrada @Title es igualado a %Garlic%. Este valor se enva a la clusula WHERE del comando SELECT del
procedimiento almacenado. Dado que la clusula WHERE usa la palabra clave KEYWORD, se pueden usar caracteres
comodines (tal como %) para que que la consulta busque aquellos ttulos que contienen la palabra Garlic.

A continuacin se muestra un modo mas sucinto de ejecutar el procedimiento. Fjese que no es necesario asignar
especficamente las variables desde el procedimiento almacenado al valor del parmetro de salida o a las variables de
salida declaradas aqu:

DECLARE @y_YtdSales int, @t_TitleText varchar(80)

EXECUTE SalesForTitle

%Garlic%, -- configura el valor del parmetro de entrada

@y_YtdSales OUTPUT -- recibe el primer parmetro de salida

@t_TitleText OUTPUT -- recibe el segundo parmetro de salida

-- muestra las variables retornadas por la ejecucin del procedimiento

SELECT Title = @t_TitleText, Nmero de ventas = @y_YtdSales

GO

Cuando se ejecuta el procedimiento, este retorna lo siguiente:

Number Return of
Title
Sales
NULL NULL

Un interesante resultado de este procedimiento es que se retorna slo una fila. An cuando el comando SELECT en el
procedimiento devuelve mltiples filas, cada variable mantiene slo un valor (la ltima fila de datos retornada). Mas
adelante veremos algunas soluciones a este problema.

El comando RETURN y el manejo de errores

http://www.sqlmax.com/centro/moduloIV_3.asp?MX= (2 de 4)20/11/2007 04:05:50 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

A menudo, se necesita codificar para manejar errores. SQL Server provee funciones y comandos para tratar con los
errores que se producen durante la ejecucin de un procedimiento almacenado. Las dos categoras primarias de errores
de computo, tales como una base no disponible o errores de usuarios. Se utilizan cdigos de retorno y la funcin
@@ERROR para manejar errores que se producen cuando se ejecuta el procedimiento.

Los cdigos de retorno pueden usarse para otros propsitos adems de manejar errores. El comando RETURN se usa
para generar cdigos y salidas de un batch, y puede proveer d cualquier valor entero al programa que llamador.
Veremos ejemplos de cdigos que usan los cdigos de retorno para proveer un valor tanto como para manejar errores o
para otros fines.

El comando RETURN se usa primariamente para el manejo de errores porque cuando se corre el comando RETURN, el
procedimiento almacenado termina inmediatamente.

Considere el procedimiento almacenado SalesForTitle del punto anterior. Si el valor especificado para el valor de entrada
(@Title) no existe en la base ded atos, ejecutar el procedimiento retorna el siguiente conjunto de resultados:

Number Return of
Title Code
Sales
Onions, Leeks, and Garlic: Cooking Secrets of the 0
375
Mediterranean

Es mas claro explicar el usuario que no se han encontrado registroa. El ejemplo siguiente muestra como modificar el
procedimiento almacenado SalesForTitle para usar un cdigo de retorno (y proveer un mensaje mas til):

ALTER PROCEDURE dbo.SalesForTitle

@Title varchar(80), @YtdSales int OUTPUT,

@titletext varchar (80) OUTPUT

AS

-- Controla para ver si el titulo esta la base. Sino, sale y devuelve 1

IF (SELECT COUNT(*) FROM titles WHERE title LIKE @Title) = 0

RETURN(1)

ELSE

SELECT @YtdSales = ytd_sales, @TitleText = title

FROM titles WHERE title LIKE @Title

GO

La sentencia IF posterior la palabra clave AS determina si el parmetro de entrada es provisto cuando el procedimiento
se ejecuta y si coincide con algn registro de la base de datos. Si la funcin COUNT retorna 0, entonces el cdigo de
retorno es puesto en 1, RETURN(1). En otro caso, se ejecuta la consulta SELECT por las ventas anuales y la informacin
del libro. En este caso el cdigo de retorno es igual a 0.

Para invocar el procedimiento se necesitan hacer algunos cambios. El ejemplo siguiente configura al parmetro de
entrada @Title igual a Garlic%:

--Agrega @r_Code para mantener el resultado

DECLARE @y_YtdSales int, @t_TitleText varchar(80), @r_Code int

-- Ejecuta el procedimeinto e iguala @r_Code al el procedimiento

EXECUTE @r_Code = SalesForTitle

http://www.sqlmax.com/centro/moduloIV_3.asp?MX= (3 de 4)20/11/2007 04:05:50 a.m.


SQL SERVER Manual en Linea - Modulo 4/2

@YtdSales = @y_YtdSales OUTPUT,

@TitleText = @t_TitleText OUTPUT,

@Title = "Garlic%"

-- Determina el valor de @r_Code y ejecuta el codigo

IF @r_Code = 0

SELECT "Title" = @t_TitleText,

"Number of Sales" = @y_YtdSales, "Return Code" = @r_Code

ELSE IF @r_Code = 1

PRINT 'No matching titles in the database. Return code=' + CONVERT(varchar(1),@r_Code)

GO

< Programa < Tema2

http://www.sqlmax.com/centro/moduloIV_3.asp?MX= (4 de 4)20/11/2007 04:05:50 a.m.


SQL SERVER Manual en Linea - Modulo 5/1

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO IV: Conectarse a un SQL Server

TEMA 1: Comenzando con ADO - ActiveX Data Objects

Definicin

ADO en ActiveX Data Objets es un modelo de objetos de acceso a datos que se apoya sobre OLEDB. Permite dirigir los
datos que vienen de bases de datos relacionales (SQL Server, Oracle), o de otras fuentes de datos no relacionales
como ficheros de texto, fuentes de datos que no son de Microsoft, etc. Es un medio para acceder uniformemente a todos
los tipos de datos. En cierta manera podemos decir que ODBC permite acceder a bases de datos relacionales, mientras
que OLEDB permite el acceso a todos los tipos de datos, sean relacionales o no.

Este modelo de objetos se ha introducido como modelo de acceso de datos para IIS. Sus principales caractersticas son
las siguientes:

Mnimo trfico en la red Thread Safe (soportando accesos concurrentes o multithread) Nmero mnimo de capas entre
las aplicaciones y los datos. Facilidad de utilizacin: modelo de objetos automatizado Tiene en cuenta los conocimientos
adquiridos por los desarrolladores sobre la otras tecnologas como DAO o RDO

Arquitectura tecnolgica

http://www.sqlmax.com/centro/moduloV_1.asp?MX= (1 de 7)20/11/2007 04:05:54 a.m.


SQL SERVER Manual en Linea - Modulo 5/1

OLEDB es una tecnologa que tiene como objetivo resolver ciertas restricciones de ODBC. Esta tecnologa autoriza el
acceso a todo tipo de datos, permitiendo administrar el aspecto de tener distribuidas las fuentes de datos, y tiene en
cuenta las restricciones de la web. Esta tecnologa tiene como objetivo reemplazar a la tecnologa ODBC. ADO es el
modelo de objetos que permite simplificar el acceso a esta tecnologa.
Un proveedor OLEDB implementa las interfaces OLEDB. Permite a un usuario OLEDB alcanzar todo tipo de fuentes de
datos de una manera uniforme a travs de este juego de interfaces documentado. En cierto sentido, un proveedor
OLEDB es similar a un driver ODBC que proporciona un mecanismo uniforme de acceso a los datos relacionales. Los
proveedores OLEDB no slo proporcionan un mecanismo uniforme de acceso a los datos relacionales, si no que tambin
a datos no relacionales. Adems, los proveedores OLEDB se construyen sobre la base del modelo COM (Component
Objet Model) mientras que los drivers ODBC estn basados en una especificacin de APIs de C.

El modelo de objetos ADO

El esquema siguiente muestra los objetos y las relaciones existentes entre los objetos y el modelo.

Objetos y Colecciones del modelo de objetos ADO

Los objetos Connection, Recordset y Command son los objetos ms significativos de este modelo. Clsicamente, una
aplicacin las utiliza como:

Objeto o Coleccin Utilizacin

Objeto Connection Permite establecer las conexiones entre el cliente y el origen de datos

Objeto Command Permite realizar los comandos, como las consultas SQL o las actualizaciones de una
base de datos.

Objeto Recordset Permite ver y manipular los resultados de una consutla

Coleccin Parameters Es utilizada cuando la consulta del objeto Command necesita los parmetros.

Coleccin Errors La coleccin Errors y el objeto Error se acceden a travs del objeto Connection, a no
ser que se produzca un error de proveedor . El objeto Error es diferente del objeto
Err de VB, en la medida en que no contiene los errores generados y definidos por el
proveedor, por lo tanto, permite obtener informacin precisa sobre la causa del
error.

Coleccin Fields La coleccin Fields y el objeto Field se utilizan a travs del objeto Recordset, una
vez que ste contiene los datos.

Descripcin de los objetos y colecciones

La coleccin Properties proporciona la informacin sobre las caractersticas de los diferentes objetos Connection,
Command, Recordset y Field. Cada objeto de Property es accesible a travs de la coleccin Properties de cada uno de
estos objetos.

http://www.sqlmax.com/centro/moduloV_1.asp?MX= (2 de 7)20/11/2007 04:05:54 a.m.


SQL SERVER Manual en Linea - Modulo 5/1

Coleccin Properties

Aunque ADO es un modelo del tipo jerrquico, los objetos de ADO, excepto Error, Field y Property pueden crearse de
forma autnoma, es decir, sin hacer referencia al objeto relacionado. Esto es diferente de los objetos DAO y RDO, que
requieren en la mayora de los casos la creacin del objeto Parent (por ejemplo, un objeto DAO.Connection necesita un
objeto DAO.Workspace para poder crearse).

ADO es un modelo de objetos que permite una gran flexibilidad al programador. Por consiguiente, hay distintas
posibilidades para lograr la misma tarea. Por ejemplo, para ejecutar una consulta, es posible usar el mtodo Execute del
objeto Command o bien el del objeto Connection.

En resumen, este es un diagrama que muestra las relaciones entre los diferentes objetos que constituyen ADO:

Ejemplos de ADO

Abrir y cerrar una conexin con una base de datos SQL Server usando el proveedor por defecto que es el proveedor de
OLEDB para ODBC

Sub ConnectionExample1()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection

' Abrir la conexin, especificando el nombre del origen de datos,


' id de usuario, y contrasea.
cn.Open "DSNPubs", "sa", ""

' Si la conexin est abierta, lo muestra.


If cn.State = adStateOpen Then
Debug.Print "Conexin abierta."
End If

' Cerrar la conexin.


cn.Close

End Sub

http://www.sqlmax.com/centro/moduloV_1.asp?MX= (3 de 7)20/11/2007 04:05:54 a.m.


SQL SERVER Manual en Linea - Modulo 5/1

Abrir y cerrar una conexin con una base de datos SQL Server usando el proveedor OLEDB para SQL Server que es el
proveedor recomendado

Private Sub ConnectionExemple2()


Dim cn As New ADODB.Connection

cn.Provider = "SQLOLEDB"
cn.Open "Data Source=MySQLServerName;Initial Catalog=pubs;", "sa", ""

' Si la conexin est abierta, lo muestra.


If cn.State = adStateOpen Then
Debug.Print "Conexin abierta."
End If

' Cerrar la conexin.


cn.Close
Set cn = Nothing

End Sub

Abrir y cerrar un Recordset

Sub RecordsetExample() Dim rs As

New ADODB.Recordset ' Abrir el recordset, especificando la


sentencia SQL ' y la cadena
de conexin. rs.Open "Select * fromtitles","DSN=pubs;UID=sa"

' Bucle a travs del recordset e impresin del primer campo.


Do While Not rs.EOF
Debug.Print rs(0)
rs.MoveNext
Loop

' Cerrar el recordset.


rs.Close
End Sub

Usar el mtodo Execute del objeto Command para ejecutar una consulta de tipo texto

Sub CommandExample()
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

' Establecer el comando conexin usando una cadena de conexin.


cmd.ActiveConnection = "DSN=pubs;UID=sa"
' Establecer el comando texto, y especificar que es
' una sentencia SQL.
cmd.CommandText = "Select * from titles"
cmd.CommandType = adCmdText

' Crear un recordset.


Set rs = cmd.Execute()

' Bucle a travs del recordset e impresin del primer campo.


Do While Not rs.EOF
Debug.Print rs(0)
rs.MoveNext
Loop

' Cerrar el recordset.

http://www.sqlmax.com/centro/moduloV_1.asp?MX= (4 de 7)20/11/2007 04:05:54 a.m.


SQL SERVER Manual en Linea - Modulo 5/1

rs.Close

End Sub

Usar el mtodo Execute del objeto Command para ejecutar un procedimiento de almacenado

Sub ParameterExample()
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim prm As ADODB.Parameter

' Establecer el comando conexin usando una cadena de conexin.


cmd.ActiveConnection = "DSN=pubs;uid=sa"

' Establecer el comando texto, y especificar que es


' una sentencia SQL.
cmd.CommandText = "byroyalty"
cmd.CommandType = adCmdStoredProc

' Establecer un nuevo parmetro para el procedimiento guardado.


Set prm = cmd.CreateParameter("Royalty", adInteger, adParamInput, , 50)
cmd.Parameters.Append prm

' Crear un recordset.


Set rs = cmd.Execute

' Bucle a travs del recordset e impresin del primer campo.


Do While Not rs.EOF Debug.Print rs(0)
rs.MoveNext
Loop

' Cerrar el recordset.


rs.Close

End Sub

Almacenar los resultados de una consulta Access en un fichero Excel

Private Sub Command1_Click()


Dim cn As ADODB.Connection

Set cn = New ADODB.Connection


cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
c:\bd1.mdb" cn.Execute "Select * into
[Excel8.0];Database=c:\Test1.xls;Hdr=Yes].[Sheet3] From Clients"
cn.Close
Set cn = Nothing
End Sub

' Explorar la coleccin Errors.


Sub ErrorExample()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
On Error GoTo AdoError

' Abrir la conexin usando un DSN que no existe.


cn.Open "MissingDSN", "sa", ""

Exit Sub

AdoError:
Dim Errs As ADODB.Errors
Dim errLoop As Error

http://www.sqlmax.com/centro/moduloV_1.asp?MX= (5 de 7)20/11/2007 04:05:54 a.m.


SQL SERVER Manual en Linea - Modulo 5/1

Dim strError As String

' Bucle hasta el objeto Error en la


' coleccin Errors y muestra las propiedades.
Set Errs = cn.Errors
For Each errLoop In Errs
Debug.Print errLoop.SQLState
Debug.Print errLoop.NativeError
Debug.Print errLoop.Description
Next

End Sub

Enumerar los campos (nombre, tipo y valor) de un recordset

Sub FieldExample()
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set rs =
New ADODB.Recordset ' Abrir el recordset, especificando la
sentencia SQL ' y la cadena
de conexin. rs.Open "Select * fromauthors","DSN=pubs;UID=sa"

Debug.Print "Fields in Authors Table:" & vbCr

' Bucle hasta el objeto Field en la


' Coleccin Fields de la tabla y muestra las propiedades.
For Each fld In rs.Fields
Debug.Print "Name: " & fld.Name & vbCr & _
"Type: " & fld.Type & vbCr & _
"Value: " & fld.Value
Next fld

' Cierre del recordset.


rs.Close

End Sub

Mostrar los valores de ciertas propiedades de una conexin (el curso de la coleccin de Properties)

Sub PropertyExample()
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

' Abrir la conexin, especificando el nombre del origen de datos,


' id del usuario, u contrasea.
cn.Open "pubs", "sa"

' Establecer el comando conexin usando una cadena de conexin.


Set cmd.ActiveConnection = cn
' Establecer el comando texto, especificando que es una sentencia SQL.
cmd.CommandText = "Select * from titles"
cmd.CommandType = adCmdText

' Crear el recordset.


Set rs = cmd.Execute()

' Muestra la propiedad ConnectionTimeout de la conexin.


Debug.Print cn.Properties("Connect Timeout")

' Muestra la propiedad CommandTimeout del comando.


Debug.Print cmd.Properties("Command Time out")

http://www.sqlmax.com/centro/moduloV_1.asp?MX= (6 de 7)20/11/2007 04:05:54 a.m.


SQL SERVER Manual en Linea - Modulo 5/1

' Muestra la propiedad Updatability del recordset.


Debug.Print rs.Properties("Updatability")

' Cierra el recordset.


rs.Close
End Sub

Las cadenas de conexin

Si necesita escribir una cadena de conexin, existe una manera de generarla con el asistente de creacin de una
conexin de datos.

Se puede usar esta herramienta de creacin de conexiones de datos en VB:

Utilize el men Ver y seleccione Ventana de la vista Datos


Cree un Entorno de datos haciendo clic en el botn derecho en la ventana de datos.
En la ventana Entorno de datos, hacer clic en el botn derecho sobre Connection1 para ver las caractersticas de la
conexin (el proveedor, DSN, las propiedades especficas).
Probar la conexin antes de hacer clic en el botn de Aceptar
Entrar en la ventana de propiedades y seleccionar el objeto Connection1: La propiedad DataSource contiene la
cadena de conexin necesaria.

< Programa Tema2 >

http://www.sqlmax.com/centro/moduloV_1.asp?MX= (7 de 7)20/11/2007 04:05:54 a.m.


SQL SERVER Manual en Linea - Modulo 5/2

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO IV: Conectarse a un SQL Server

TEMA 2: Modelo de objetos de ADO

Objetos de datos ActiveX

Los Objetos de datos ActiveX (ActiveX Data Object, ADO) constituyen una interfaz de Microsoft, estratgica y de alto
nivel, para toda clase de datos. ADO constituye un mtodo de acceso a datos coherente y de alto rendimiento, tanto
cuando se crea una base de datos cliente de usuario, como si se crea un objeto de trabajo de capas intermedias con una
aplicacin, herramienta, lenguaje o, incluso, con un explorador de Internet. ADO es la nica interfaz de datos necesaria
para programar soluciones cliente/servidor de 1 a n capas y soluciones basadas en datos Web.
ADO est diseada como una interfaz de nivel de aplicacin, fcil de usar, para el modelo ms reciente y potente de
acceso a datos de Microsoft, OLE DB. OLE DB proporciona acceso de alto rendimiento a cualquier origen de datos, como
las bases de datos relacionales y no relacionales, los sistemas de correo electrnico y archivo, texto y grficos, los
objetos de trabajo personalizados, etc. ADO se implementa con un mnino de trfico de red en escenarios Internet clave
y con un mnino de capas entre los datos de origen y los resultados proporcionando una interfaz ligera y de altas
prestaciones.
ADO es fcil de usar porque se activa mediante un mtodo conocido: la interfaz OLE, disponible prcticamente en todas
las herramientas y lenguajes existentes actualmente en el mercado. Y, puesto que los ADO han sido diseados para
combinar las mejores funciones de RDO y DAO, y eventualmente para sustituirlos, utiliza convenciones similares con
semntica simplificada que facilitan el aprendizaje a los programadores.

Modelo de objetos de ADO

Cada uno de los objetos Connections,Command,Recordset y Field Tambin tiene una coleccin Properties.

< Programa < Tema1 Tema3 >

http://www.sqlmax.com/centro/moduloV_2.asp?MX=20/11/2007 04:05:56 a.m.


SQL SERVER Manual en Linea - Modulo 5 / 3

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO IV: Conectarse a un SQL Server

TEMA 3: Objetos ADO

Command, objeto (ADO) Descripcin

Un objeto Command es la definicin de un comando especfico que se piensa ejecutar contra un origen de datos.

Utilice un objeto Command para consultar una base de datos y obtener registros en un objeto Recordset para ejecutar
una operacin de manejo masivo de datos o para manipular la estructura de una base de datos. Dependiendo de la
funcionalidad del proveedor, algunas colecciones, mtodos o propiedades de Command pueden generar un error cuando
se les haga referencia. Con las colecciones, mtodos y propiedades de un objeto Command, puede hacer lo siguiente:

Definir el texto ejecutable del comando (por ejemplo, una instruccin SQL) con la propiedad CommandText.

Definir consultas parametrizadas o argumentos de procedimientos almacenados con los objetos Parameter y la
coleccin Parameters.

Ejecutar un comando y obtener un objeto Recordset si resulta apropiado con el mtodo Execute.

Especificar el tipo de comando con la propiedad CommandType antes de la ejecucin para optimizar el rendimiento.

Controlar con la propiedad Prepared, si el proveedor guarda una versin preparada (o compilada) del comando antes
de la ejecucin.

Establecer el nmero de segundos que un proveedor esperar que el comando se ejecute con la propiedad
CommandTimeout.

Asociar una conexin abierta con un objeto Command estableciendo su propiedad ActiveConnection.

Establecer la propiedad Name para identificar el objeto Command como un mtodo del objeto Connection asociado.

Pasar un objeto Command a la propiedad Source de un Recordset para obtener los datos.

Nota: Para ejecutar una consulta sin utilizar un objeto Command, pase una cadena de consulta al mtodo Execute de un
objeto Connection o al mtodo Open de un objeto Recordset. Sin embargo, se requiere un objeto Command cuando
quiera que el texto del comando persista y volver a ejecutarlo, o utilizar parmetros en la consulta.

Para crear un objeto Command independientemente de un objeto Connection previamente definido, establezca su
propiedad ActiveConnection a una cadena de conexin vlida. ADO sigue creando un objeto Connection, pero no asigna
dicho objeto a una variable de objeto. Sin embargo, si va a asociar varios objetos Command con la misma conexin,
tiene que crear y abrir de forma explcita un objeto Connection; esto asigna el objeto Connection a una variable de
objeto. Si no establece la propiedad ActiveConnection de los objetos Command a esta variable de objeto, ADO crea un
nuevo objeto Connection por cada objeto Command, incluso si utiliza la misma cadena de conexin. Para ejecutar un
Command, slo invquelo utilizando su propiedad Name en el objeto Connection asociado. El objeto Command ha de
tener su propiedad ActiveConnection establecida al objeto Connection. Si el objeto Command tuviera parmetros, pase
los valores de los parmetros como argumentos del mtodo.

Propiedades

Propiedad ActiveConnection (ADO), Propiedad CommandTect (ADO), Propiedad

CommandTimeout (ADO), Propiedad CommandType (ADO), Propiedad Prepared (ADO), Propiedad State (ADO).

Mtodos

http://www.sqlmax.com/centro/moduloV_3.asp?MX= (1 de 6)20/11/2007 04:05:59 a.m.


SQL SERVER Manual en Linea - Modulo 5 / 3

Mtodo Cancel (ADO), Mtodo CreateParameter (ADO), Mtodo Execute (ADO Command), Mtodo Execute (ADO
Connection).

Colecciones

Coleccin Properties, Coleccin Parameters.

Connection, objeto (ADO) Descripcin

Un objeto Connection representa una conexin abierta con un origen de datos.

Un objeto Connection representa una sesin nica con un origen de datos. En el caso de un sistema de base de datos
cliente/servidor, puede ser equivalente a una conexin de red actual con el servidor. Dependiendo de la funcionalidad
que acepte el proveedor, algunas colecciones, mtodos o propiedades de un objeto Connection puede que no estn
disponibles. Mediante las colecciones, mtodos y propiedades de un objeto Connection puede hacer lo siguiente:

Configurar la conexin antes de abrirla con las propiedades ConnectionString, ConnectionTimeout y Mode.

Establecer la propiedad CursorLocation para invocar al Client Cursor Provider, que acepta actualizaciones por lotes.

Establecer la base de datos predeterminada para la conexin con la propiedad DefaultDatabase.

Establecer el nivel de aislamiento de las transacciones abiertas en la conexin con la propiedad IsolationLevel.

Especificar un proveedor de OLE DB con la propiedad Provider.

Establecer, y despus romper, la conexin fsica con el origen de datos con los mtodos Open y Close.

Ejecutar un comando en la conexin con el mtodo Execute y configurar la ejecucin con la propiedad
CommandTimeout.

Administrar transacciones en la conexin abierta, incluyendo transacciones anidadas si el proveedor las acepta, con los
mtodos BeginTrans, CommitTrans y Rol-backjrans y la propiedad Attributes.

Examinar los errores devueltos por el origen de datos con la coleccin Errors.

Leer la versin de la implementacin de ADO en uso con la propiedad Version.

Obtener informacin del esquema de la base de datos con el mtodo OpenSchema.

Nota: Para ejecutar una consulta sin utilizar un objeto Command, pase una cadena de consulta al mtodo Execute de un
objeto Connection. Sin embargo, se requiere un objeto Command cuando se quiere que el texto del comando persista y
se vuelva a ejecutar, o utilice parmetros en la consulta.

Puede crear objetos Connection de forma independiente de cualquier objeto previamente definido.

Nota: Se pueden ejecutar comandos o procedimientos almacenados como si fuesen mtodos nativos del objeto
Connection.

Para ejecutar un comando, d un nombre al comando mediante la propiedad Name del objeto Command. Establezca la
propiedad ActiveConecction del objeto Command como la conexin. Despus emita una instruccin donde el nombre del
comando se utilice como si fuese un mtodo del objeto Connection, seguido de cualquier parmetro, seguido de un
objeto Recordset si se devuelve alguna fila. Establezca las propiedades del Recordset para personalizar el conjunto de
registros resultante:

Para ejecutar un procedimiento almacenado, emita una instruccin donde se utilice el nombre del procedimiento
almacenado como si fuese un mtodo del objeto Connection, seguido de sus parmetros. ADO realizar una "mejor
suposicin" de los tipos de parmetros

Propiedades

http://www.sqlmax.com/centro/moduloV_3.asp?MX= (2 de 6)20/11/2007 04:05:59 a.m.


SQL SERVER Manual en Linea - Modulo 5 / 3

Propiedad Attributes (ADO), Propiedad CommandTimeout (ADO), Propiedad ConnectionString (ADO), Propiedad
ConnectjonTimeout (ADO), Propiedad CursorLocation (ADO), Propiedad DefaultIDatabase (ADO), Propiedad
IsolationLevel (ADO), Propiedad Mode (ADO), Propiedad Provider (ADO), Propiedad State (ADO), Propiedad Version
(ADO). Objetos ADO 1315

Mtodos

Mtodos BeginTrans, CommitTrans y RollbackTrans (ADO>, Mtodo Cancel (ADO), Mtodo Close (ADO), Mtodo Execute
(Comando ADO), Mtodo Execute (Conexin ADO), Mtodo Open (Conexin ADO), Mtodo Open (Conjunto de Registros
ADO), Mtodo OpenSchema (ADO), Mtodo Save (Conjunto de Registros ADO).

Colecciones

Coleccin Properties, Coleccin Errors.

Error, objeto (ADO) Descripcin

Un objeto Error contiene los detalles sobre los errores de acceso a los datos pertenecientes a una nica operacin
relacionada con el proveedor.

Cualquier operacin relacionada con objetos ADO puede generar uno o varios errores del proveedor. Al ocurrir los
errores, uno o varios objetos Error se agregan a la coleccin Errors del objeto Connection. Cuando otra operacin ADO
genera un error, se borra la coleccin Errors y el nuevo conjunto de objetos Error se agrega a la coleccin Errors.

Nota: Cada objeto Error representa un error del proveedor concreto, no un error de ADO. Los errores de ADO pasan al
mecanismo de control de excepciones de ejecucin. Por ejemplo, en Microsoft Visual Basic, la ocurrencia de un error
concreto de ADO desencadenar un evento On Error y aparecer en el objeto Err. Para obtener la lista completa de los
errores de ADO, vea el tema Cdigos de error ADO tema.

Puede leer las propiedades de un objeto Error para obtener detalles especficos sobre cada error, incluyendo los
siguientes:

La propiedad Description, que contiene el texto del error.

La propiedad Number, que contiene el valor entero Long de la constante del error.

La propiedad Source, que identifica el objeto que ha provocado el error. Esto es particularmente til cuando tiene
varios objetos Error en la coleccin Errors despus de una peticin a un origen de datos.

Las propiedades SQLState y NativeError, que proporcionan informacin desde orgenes de datos SQL.

Cuando ocurre un error en el proveedor, se agrega a la coleccin Errors del objeto Connection. ADO acepta la devolucin
de varios errores por una misma operacin ADO para permitir tener acceso a la informacin de error especfica del
proveedor. Para obtener esta rica informacin de error en un controlador de errores, utilice las funciones de
interceptacin de errores apropiadas de su lenguaje o entorno de trabajo y despus utilice bucles anidados para
enumerar las propiedades de cada objeto Error de la coleccin Errors.

Microsoft Visual Basic y VBScript. Si no hay un objeto Connection vlido, tendr que obtener la informacin de error
desde el objeto Err.

Igual que los proveedores, ADO borra el objeto OLE Error Info antes de hacer una llamada que pueda generar un nuevo
error del proveedor. Sin embargo, la coleccin Errors del objeto Connection slo se borra y se llena cuando el proveedor
genera un nuevo error, o cuando se invoca el mtodo Clear. Algunas propiedades y mtodos devuelven advertencias que
aparecen como objetos Error en la coleccin Errors, pero no detienen la ejecucin de los programas. Antes de invocar los
mtodos Resync, UpdateBatch o CancelBatcb de un objeto Recordset, el mtodo Open de un objeto Connection, o de
establecer la propiedad Filter de un objjeto Recordset, invoque el mtodo Clear de la coleccin Errors para que pueda
leer la propiedad Count de la coleccin Errors y comprobar las advertencias devueltas.

Propiedades

Propiedad Description (ADO), Propiedad NaviteError (ADO), Propiedad Number (ADO), Propiedad Source (ADO Error),
Propiedad SQLState (ADO), Archivo Help.

http://www.sqlmax.com/centro/moduloV_3.asp?MX= (3 de 6)20/11/2007 04:05:59 a.m.


SQL SERVER Manual en Linea - Modulo 5 / 3

Field, objeto (ADO)

Un objeto Field representa una columna de datos con un tipo de datos comun.

Un objeto Recordset tiene una coleccin Fields que consiste en varios objetos Field. Cada objeto Field se corresponde
con una columna del Recordset. La propiedad Value de los objetos Field se utiliza para establecer u obtener los datos del
registro actual. Dependiendo de la funcionalidad ofrecida por el proveedor, algunas colecciones, mtodos o propiedades
de un objeto Field puede que no estn disponibles.

Con las colecciones, mtodos y propiedades de un objeto Field, puede hacer lo siguiente:

Obtener el nombre de un campo con la propiedad Name.

Ver o modificar los datos del campo con la propiedad Value.

Obtener las caractersticas bsicas de un campo con las propiedades Type, Precision y NumericScale. Obtener el
tamao declarado de un campo con la propiedad DefinedSize.

Obtener el tamao actual de los datos de un campo dado con la propiedad ActualSize.

Determinar qu tipos de funcionalidad se aceptan para un campo dado con la propiedad Attributes y la coleccin
Properties.

Manipular los valores de los campos que contengan datos binarios o de gran tamao con los mtodos AppendChunk y
GetChunk. Si el proveedor acepta actualizaciones por lotes, resolver discrepancias en los valores de tos campos
durante una actualizacin por lotes con las propiedades OriginalValue y UnderlyingValue.

Todas las propiedades de metadatos (Name, Type, DefinedSize, Precision y NumericScale) estn disponibles antes de
abrir el Recordset del objeto Field. Su establecimiento en tal momento es til en la generacin dinmica de formularios.

Propiedades Propiedad ActualSize (ADO), Propiedad Attributes (ADO), Propiedad DefinedSize (ADO), Propiedad Name
(ADO), Propiedad NumericScale (ADO), Propiedad OriginalValue (ADO), Propiedad Precision (ADO), Propiedad Type
(ADO), Propiedad UnderlyingValue (ADO), Propiedad Value (ADO).

Mtodos Mtodo AppendChunk (ADO), Mtodo GetChunk (ADO).

Colecciones Coleccin Properties.

Parameter, objeto (ADO)

Un objeto Parameter representa un parmetro o un argumento asociado con un objeto Command basado en una
consulta parametrizada o en un procedimiento almacenado.

Muchos proveedores aceptan comandos parametrizados. Estos son comandos en los que la accin deseada est definida
una sola vez, pero se utilizan variables (o parmetros) para alterar algunos detalles del comando. Por ejemplo, una
instruccin SQL SELECT podra utilizar un parmetro para definir los criterios de bsqueda de la clusula WHERE, y otro
para definir el nombre de la columna de la clusula SORT BY. Los objetos Parameter representan parmetros asociados
con consultas parametrizadas, o los argumentos de entrada/salida y los valores devueltos por los procedimientos
almacenados. Dependiendo de la funcionalidad del proveedor, algunas colecciones, mtodos o propiedades de un objeto
Parameter puede que no estn disponibles. Con las colecciones, mtodos y propiedades de un objeto Parameter, puede
hacer lo siguiente:

Establecer u obtener el nombre de un parmetro con la propiedad Name.

Establecer u obtener el valor de un parmetro con la propiedad Value.

Establecer u obtener caractersticas de un parmetro con las propiedades Attributes, Direction, Precision,
NumericScale. Size y Type.

http://www.sqlmax.com/centro/moduloV_3.asp?MX= (4 de 6)20/11/2007 04:05:59 a.m.


SQL SERVER Manual en Linea - Modulo 5 / 3

Pasar datos binarios o de gran tamao a un parmetro con el mtodo AppendChunk.

Si conoce los nombres y las propiedades de los parmetros asociados con el procedimiento almacenado o la consulta
parametrizada a la que vaya a invocar, puede utilizar el mtodo Createparameter para crear objetos Parameter con los
valores apropiados y utilizar el mtodo Append para agregarlos a la coleccin Parameters. Esto le permite establecer y
obtener valores de parmetros sin tener que invocar el mtodo Refresh de la coleccin Parameters para obtener
informacin de los parmetros desde el proveedor, una operacin que potencialmente consume bastantes recursos.

Propiedades

Propiedad Attributes (ADO), Propiedad Direction (ADO), Propiedad Name (ADO>, Propiedad NumericScale (ADO),
Propiedad Precision (ADO), Propiedad Size (ADO), Propiedad Type (ADO), Propiedad Value (ADO).

Mtodos

Mtodo AppendChunk (ADO), Mtodo Delete (Coleccin de parmetros ADO), Mtodo Delete (Conjunto de Registros
ADO).

Colecciones

Coleccin Properties.

Recordset, objeto (ADO)

Un objeto Recordset representa todo el conjunto de registros de una tabla o del resultado de un comando ejecutado. En
cualquier momento, el objeto Recordset slo hace referencia a un nico registro dentro del conjunto, llamado registro
actual.

Los objetos Recordset se utilizan para manipular los datos de un proveedor. Cuando se utiliza ADO, se manipulan los
datos casi completamente con objetos Recordset. Tollos los objetos Recordset se construyen utilizando registros (filas) y
campos (columnas). Dependiendo de la funcionalidad aceptada por el proveedor, algunos mtodos o propiedades del
objeto Recordset puede que no estn disponibles.

ADOR.Recordset y ADODB.Recordset son ProgID que se utilizan para crear objetos Recordset. Los objetos Recordset que
resultan se comportan de forma idntica, independientemente del ProgID. ADOR.Recordset se instala con Internet
Explorer de Microsoft; ADODB.Recordset se instala con ADO. El comportamiento de un objeto Recordset esta afectado
por su entorno (esto es, cliente, servidor, Internet Explorer, etc.). Las diferencias se describen en los temas de Ayuda de
sus propiedades. mtodos y eventos. Hay cuatro tipos diferentes de cursores en ADO:

Cursor dinmico: le permite ver inserciones, modificaciones y eliminaciones de otros usuarios, y permite todos los tipos
de movimientos a travs del Recordset que estn relacionados con marcadores; permite marcadores si el proveedor los
acepta.

Cursor de conjunto de claves: se comporta como un cursor dinmico, excepto que impide ver registros agregados por
otros usuarios, e impide el acceso a registros eliminados por otros usuarios. Las modificaciones en los datos efectuadas
por otros usuarios siguen siendo visibles. Acepta siempre marcadores y, por tanto, permite todos los tipos de
movimientos a travs del Recordset.

Cursor esttico: proporciona una copia esttica de un conjunto de registros para que se utilicen en bsquedas de datos
o para generar informes; permite siempre los marcadores y, por tanto, permite todos los tipos de movimientos a travs
del Recordset. Las inserciones, modificaciones o eliminaciones efectuadas por otros usuarios no sern visibles. Este es el
nico tipo de cursor permitido cuando se abre un objeto Recordset en el lado del cliente (ADOR).

Cursor de tipo Forward-only: se comporta de forma idntica al cursor dinmico, excepto en que slo le permite recorrer
los registros hacia delante. Esto aumenta el rendimiento en situaciones en las que slo tenga que efectuar un paso a
travs de un Recordset.

Establezca la propiedad CursorType antes de abrir el Recordset para elegir el tipo de cursor, o pase un argumento
CursorType con el mtodo Open. Algunos proveedores no aceptan todos los tipos de cursores. Compruebe la
documentacin del proveedor. Si no se especifica el tipo del cursor, ADO abre un cursor de tipo Forward-only de manera
predeterminada. Cuando se utilizan con algunos proveedores (como Microsoft ODBC Provider para OLE DB junto con
Microsoft SQL Server), se pueden crear objetos Recordset independientemente de un objeto Connection definido
previamente pasando una cadena de conexin al mtodo Open. ADO sigue creando un objeto Connection, pero no

http://www.sqlmax.com/centro/moduloV_3.asp?MX= (5 de 6)20/11/2007 04:05:59 a.m.


SQL SERVER Manual en Linea - Modulo 5 / 3

asigna dicho objeto a una variable de objeto. Sin embargo, si se estn abriendo varios objetos Recordset en la misma
conexin, se tiene que crear y abrir explcitamente un objeto Connection; as se asigna el objeto Connection a una
variable de objeto. Si no se utiliza dicha variable de objeto cuando se abren los objetos Recordset, ADO crea un nuevo
objeto Connection por cada nuevo Recordset, incluso si se pasa la misma cadena de conexin. Se pueden crear tantos
objetos Recordset como sea necesario. Cuando se abre un Recordset, el registro actual est situado en el primer registro
(si lo hay) y las propiedades BOBy EOF estn establecidas a False. Si no hay registros, los valores de las propiedades
BOF y EOF son True. Pueden utilizarse los mtodos Movelfirst, MoveLast, MoveNext y MovePrevious, as como el mtodo
Move, y las propiedades AbsolutePosition, AbsolutePage y Filter para volver a colocar el registro actual, asumiendo que
el proveedor acepta la funcionalidad necesaria. Los objetos Recordset de tipo Forward-only slo aceptan el mtodo
MoveNext. Cuando se utilizan mtodos Move para visitar todos los registros (o para enumerar el Recordset), se puede
utilizar las propiedades BOF y EOF para saber si ha llegado al principio o al final del Recordset. Los objetos Recordset
pueden aceptar dos tipos de actualizacin: inmediata y por lotes. En la actualizacin inmediata, todas las modificaciones
se escriben inmediatamente en el origen de datos despus de invocar el mtodo Update. Tambin se pueden pasar
matrices de valores como parmetros en los mtodos AddNew y Update y actualizar de forma simultnea varios campos
de un registro. Si un proveedor acepta la actualizacin por lotes, se puede hacer que el proveedor guarde en la cach las
modificaciones efectuadas en varios registros y transmitirlos despus en una sola llamada a la base de datos con el
mtodo UpdateBatch. Esto se aplica a las modificaciones efectuadas con los mtodos AddNew, Update y Delete. Despus
de invocar el mtodo UpdateBatch, se puede utilizar la propiedad Status para comprobar si ha habido algn conflicto en
los datos para resolverlo.

Nota: Para ejecutar una consulta sin utilizar un objeto Command, pase una cadena de consulta al mtodo Open de un
objeto Recordset. Sin embargo. se requiere un objeto Command cuando quiera que el texto del comando persista para
volver a ejecutarlo, o cuando utilice parmetros en la consulta.

Propiedades

Propiedad AbsolutePage (ADO), Propiedad AbsolutePosition (ADO), Propiedad ActiveConnection (ADO), Propiedad BOF,
EOF (ADO), Propiedad Bookmark (ADO), Propiedad CacheSize (ADO), Propiedad CursorLocation (ADO), Propiedad
CursorType (ADO), Propiedad EditMode (ADO), Propiedad F'ilter (ADO), Propiedad LockType (ADO), Propiedad
MarshalOption (ADO), Propiedad MaxRecords (ADO), Propiedad PageCount (ADO), Propiedad PageSize (ADO), Propiedad
RecordCount (ADO), Propiedad Source (Conjunto de Registros ADO), Propiedad State (ADO), Propiedad Status (ADO).

Mtodos

Mtodo AddNew (ADO), Mtodo Cancel (ADO), Mtodo CancelBatch (ADO), Mtodo CancelUpdate (ADO), Mtodo Clone
(ADO), Mtodo Delete (Coleccin de parmetros ADO). Mtodo Delete (Coleccin de campos ADO), Mtodo Delete
(Conjunto dc registros ADO), Mtodo Move (ADO), Mtodos MoveFirst, MoveLast, MoveNext y MovePrevious (ADO),
Mtodo NextRecordset (ADO), Mtodo Open (Conexin ADO) Mtodo Open (Conjunto de regi~tros ADO), Mtodo
Requery (ADO), Mtodo Resync (ADO), Mtodo Save (Conjunto de registros ADO), Mtodo Supports (ADO). Mtodo
Update (ADO), Mtodo UpdateBatch (ADO).

< Programa < Tema2 Tema4 >

http://www.sqlmax.com/centro/moduloV_3.asp?MX= (6 de 6)20/11/2007 04:05:59 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO IV: Conectarse a un SQL Server

TEMA 4: Propiedades ADO

AbsolutePage, propiedad (ADO)

Especifica en qu pgina reside el registro actual.

Se aplica a Objeto Recordset (ADO).

Configuracin y valores devueltos


Establece o devuelve un valor de tipo Long entre 1 y el nmero Recordset (PageCount) o devuelve una de las constantes
siguientes:

El objeto Recordset est vaco, la posicin actual se desconoce o


adPosUnknown
el proveedor no admite la propiedad AbsoltitePage.
El puntero del registro actual est al comienzo del archivo (C5
adPosBOF
decir, la propiedad BOF tiene el valor True).
El puntero del registro actual est al final del archivo (es decir, la
adPosEOF
propiedad EOF tiene el valor True).

Utilice la propiedad AbsolutePage para identificar el nmero de la pgina en que se encuentra el registro actual. Utilice la
propiedad PageSize para dividir lgicamente el objeto Recordset en varias pginas, cada una de las cuales debe tener un
nmero de registros igual a PageSize (excepto la ltima pgina, que puede tener menos registros). El proveedor debe
ser compatible con la funcionalidad apropiada para que esta propiedad est disponible. Al igual que la propiedad
AbsolutePosition, la propiedad AbsolutePage est en base 1 v es igual a 1 cuando el registro actual es el primer registro
del objeto Recordset. Establezca esta propiedad para moverse al primer registro de una pgina especfica. Obtenga el
nmero total de pginas a partir de la propiedad PageCount.

AbsolutePosition, propiedad (ADO)

Especifica la posicin ordinal del registro actual de un objeto Recordset.

Se aplica a

Objeto Recordset (ADO).

Configuracin y valores devueltos

Establece o devuelve un valor de tipo Long entre 1 y el nmero de registros del objeto Recordset (RecordCount) o
devuelve una de las constantes siguientes: Constante Descripcin

El objeto Recordset est vaco, la posicin actual se desconoce o


adPosUnknown
el proveedor no admite la propiedad AbsoltitePage.
El puntero del registro actual est al comienzo del archivo (C5
adPosBOF
decir, la propiedad BOF tiene el valor True).
El puntero del registro actual est al final del archivo (es decir, la
adPosEOF
propiedad EOF tiene el valor True).

Utilice la propiedad AbsolutePosition para moverse a un registro segn su posicin ordinal en el objeto Recordset o para
determinar la posicin ordinal del registro actual. El proveedor debe ser compatible con la funcionalidad apropiada para
que esta propiedad est disponible. Al igual que la propiedad AbsolutePage, la propiedad AbsolutePosition est en base 1
y es igual a 1 cuando el registro actual es el prner registro del objeto Recordset. Puede obtener el nmero total de
registros contenidos en dicho objeto Recordset a partir de la propiedad RecordCount. Cuando establece la propiedad

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (1 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

AbsoiutePostion, incluso si es para un registro contenido en la memoria cach actual, ADO vuelve a cargar la memoria
cach con un nuevo grupo de registros que comienza con el registro especificado. La propiedad CacheSize determina el
tamao de este grupo.

Nota: No debera utilizar la propiedad AbsolutePosition como un nmero de registro sustirntorio. La posicin de un
registro dado cambia cuando se elimina un registro anterior Tampoco hay ninguna seguridad de que un registro dado
tendr la misma propiedad AbsolutePosition si se vuelve a consultar o se vuelve a abrir el objeto Recordset. Los
marcadores siguen siendo la forma recomendada para conservar y volver a una posicin dada, v son la nica manera de
posicionamiento en todos los tipos de objetos Recordset.

Ejemplo
Este ejemplo muestra cmo la propiedad AbsolutePosition puede llevar cuenta del progreso de un bucle que enumera
todos los registros de un Recordset. Utiliza la propiedad CursorLocation para habilitar la propiedad AbsolutePosition
ajustando el cursor a un cursor de cliente:

Public Sub AbsolutePositionX()

Dim rstEmployees As ADODB.Recordset


Dim strCnn As String
Dim strMessage As String

' Open a recordset for the Employee table


' using a client cursor.
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
Set rstEmployees = New ADODB.Recordset
' Use client cursor to enable AbsolutePosition property.
rstEmployees.CursorLocation = adUseClient
rstEmployees.Open "employee", strCnn, , , adCmdTable

' Enumerate Recordset.


Do While Not rstEmployees.EOF
' Display current record information.
strMessage = "Employee: " & rstEmployees!lName & vbCr & _
"(record " & rstEmployees.AbsolutePosition & _
" of " & rstEmployees.RecordCount & ")"
If MsgBox(strMessage, vbOKCancel) = vbCancel _
Then Exit Do
rstEmployees.MoveNext
Loop

rstEmployees.Close

End Sub

BOF, EOF, propiedades (ADO)

BOF indica que la posicin del registro actual est antes del primer registro de un objeto Recordset EOF indica que la
posicin del registro actual esta despus del ltimo registro de un objeto Recordset.

Valor devuelto
Las propiedades BOF y EOF devuelven valores Boolean.

Se aplica a Objeto Recordset ADO.

Utilice las propiedades BOF y BOF para determinar si un objeto Recordset contiene registros o si se han sobrepasado los
lmites de un objeto Recordset al moverse de un registro a otro.
La propiedad BOF devuelve True (-1) si la posicin del registro actual est antes del primer registro, y devuelve False
(O) si la posicin del retristro actual esta en o despus del primer registro.
La propiedad EOF devuelve True si la posicin del registro actual est despus del ltimo registro, y devuelve False si la
posicin del registro actual est en o despus del ltimo registro.
Si una de las dos propiedades BOF o EOF es true. no hay ningn registro actual.

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (2 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

Si se abre un objeto Recordset que no contiene registros las propiedades BOF y EOF se establecen a True y el valor de la
propiedad RecordCount del objeto Recordset es cero.
Cuando se abre un objeto Recordset que contiene. al menos. un registro. el primer registro es el registro actual y las
propiedades BOF y BOF tienen el valor False.
Si se elimina el ltimo registro que queda en el objeto Recordset, las propiedades BOF y EOF pueden conservar el valor
False hasta que se intente volver a colocar el registro actual.
Esta tabla muestra qu mtodos Move se permiten con diferentes combinaciones de las propiedades BOF y EOF:

MoveFirst, MovePrevious, MoveNext,


Move O
MoveLast Move<O Move>O
BOF=True,EOF=False Permitido Error Error Permitido
BOF=False,
Permitido Permitido Error Error
EOF=True
Ambas True Error Error Error Error
Ambas False Permitido Permitido Permitido Permitido

Permitir un mtodo Move no garantiza que el mtodo localizar correctamente un registro, slo significa que al llamar al
mtodo Move especificado no se producir un error. La tabla siguiente muestra qu ocurre en los valores de las
propiedades BOF y EOF cuando se llama a varios mtodos Move, pero no puede localizar correctamente un registro:

BOF EOF
MoveFirst, MoveLast Se establece a True. Se establece a True.
Move O Ningn cambio Ningn cambio
MovePrevious, Move <O Se establece a True. Ningn cambio
MoveNext, Move > O Ningn cambio Se establece a True.

Eemplo
Este ejemplo utiliza las propiedades BOF y EOF para visualizar un mensaje si un usuario intenta desplazarse ms all del
primer o ltimo registro de un Recordset. Utiliza la propiedad Bookmark para permitir al usuario etiquetar un registro en
un Recordset y volver a l ms tarde:

Public Sub BOFX()

Dim rstPublishers As ADODB.Recordset


Dim strCnn As String
Dim strMessage As String
Dim intCommand As Integer
Dim varBookmark As Variant

' Open recordset with data from Publishers table.


strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
Set rstPublishers = New ADODB.Recordset
rstPublishers.CursorType = adOpenStatic
' Use client cursor to enable AbsolutePosition property.
rstPublishers.CursorLocation = adUseClient
rstPublishers.Open "SELECT pub_id, pub_name FROM publishers " & _
"ORDER BY pub_name", strCnn, , , adCmdText

rstPublishers.MoveFirst

Do While True
' Display information about current record
' and get user input.
strMessage = "Publisher: " & rstPublishers!pub_name & _
vbCr & "(record " & rstPublishers.AbsolutePosition & _
" of " & rstPublishers.RecordCount & ")" & vbCr & vbCr & _
"Enter command:" & vbCr & _
"[1 - next / 2 - previous /" & vbCr & _
"3 - set bookmark / 4 - go to bookmark]"
intCommand = Val(InputBox(strMessage))

Select Case intCommand

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (3 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

' Move forward or backward, trapping for BOF


' or EOF.
Case 1
rstPublishers.MoveNext
If rstPublishers.EOF Then
MsgBox "Moving past the last record." & _
vbCr & "Try again."
rstPublishers.MoveLast
End If
Case 2
rstPublishers.MovePrevious
If rstPublishers.BOF Then
MsgBox "Moving past the first record." & _
vbCr & "Try again."
rstPublishers.MoveFirst
End If

' Store the bookmark of the current record.


Case 3
varBookmark = rstPublishers.Bookmark

' Go to the record indicated by the stored


' bookmark.
Case 4
If IsEmpty(varBookmark) Then
MsgBox "No Bookmark set!"
Else
rstPublishers.Bookmark = varBookmark
End If

Case Else
Exit Do
End Select

Loop

rstPublishers.Close

End Sub

Este ejemplo utiliza las propiedades Bookmark y Filter para crear una vista limitada del Recordset. Slo son accesibles
los registros referenciados por la matriz de marcadores:

Public Sub BOFX2()

Dim rs As New ADODB.Recordset


Dim bmk(10)

rs.CursorLocation = adUseClient
rs.ActiveConnection = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=;"

rs.Open "select * from authors", , adOpenStatic, adLockBatchOptimistic


Debug.Print "Number of records before filtering: ", rs.RecordCount

ii = 0
While rs.EOF <> True And ii < 11
bmk(ii) = rs.Bookmark
ii = ii + 1
rs.Move 2
Wend
rs.Filter = bmk
Debug.Print "Number of records after filtering: ", rs.RecordCount

rs.MoveFirst
While rs.EOF <> True
Debug.Print rs.AbsolutePosition, rs("au_lname")

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (4 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

rs.MoveNext
Wend

End Sub

CommandTimeout, propiedad (ADO) Descripcin

Indica el intervalo de espera para que se ejecute un comando antes de que finalice el intento y se genere un error.

Se aplica a

Objeto Command (ADO), Objeto Connection (ADO).

Configuracin y valores devueltos

Establece o devuelve un valor Long que indica, en segundos, el intervalo de espera para que se ejecute un comando. El
valor predeterminado es 30.

Comentarios

Use la propiedad CommandTimeout en un objeto Connection o en un objeto Command para permitir la cancelacin de
una llamada al mtodo Execute, debida a demoras en el trfico de la red o a una sobrecarga en el servidor. Si transcurre
el intervalo establecido en la propiedad CommandTimeout antes de que termine la ejecucin de la orden, se produce un
error y ADO cancela el comando. Si establece la propiedad a cero, ADO esperar indefinidamente hasta que termine la
ejecucin. Compruebe que el proveedor y el origen de datos para los que est escribiendo cdigo admiten la
funcionalidad CommandTimeout. El valor de CommandTimieout en un objeto Connection no afecta al valor de
CommandTimeout en un objeto Command de la misma Connection,. es decir, la propiedad CommandTimeout del objeto
Command no hereda el valor de CommandTimeout del objeto Connection. En un objeto Connection, la propiedad
CommandTimeout permanece en modo lectura/escritura despus de que se abra Connection.

ConnectionString, propiedad (ADO)

Contiene la informacin que se utiliza para establecer una conexin a un origen de datos.

Se aplica a

Objeto Connection (ADO).

Configuracin y valores devueltos

Establece o devuelve un valor String.

Use la propiedad ConnectionString para especificar un origen de datos pasando una cadena de conexin detallada que
contenga una serie de instrucciones argumento = valor separadas con punto y coma.

ADO admite cuatro argumentos con la propiedad ConnectionString; cualquier otro argumento pasa directamente al
proveedor sin que ADO lo procese. Los argumentos compatibles con ADO son los siguientes:

Argumento Descripcin
Provider= Especifica el nombre del proveedor que se usa con la conexion
Indica el nombre de un archivo especifico del proveedor (por Qempo, un objeto de origen de
File Name=
datos persistente) que contiene informacin sobre la conexin preestablecida.
Especifica el nombre de un proveedor que se usa al abrir una conexin del lado del cliente
Remote provider=
(solamente con Remote Data Service).
Especifica la ruta de acceso del servidor que se usa al abrir una conexin del lado del cliente
Remote Server=
(solamente con Remote Data Service).

Argumento Descripcin Provider Especifica el nombre del proveedor que se usa con la conexion. Indica el nombre de un

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (5 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

archivo especifico del proveedor (por Qempo, un objeto de origen de datos persistente) que contiene informacin sobre
la conexin preestablecida. File Name Remote provider

Especifica el nombre de un proveedor que se usa al abrir una conexin del lado del cliente (solamente con Remote Data
Service).

Remote Server Especifica la ruta de acceso del servidor que se usa al abrir una conexin del lado del cliente (solamente
con Remote Data Service).

Despus de que se establezca la propiedad ConnectionString y se abra el objeto Connection. es posible que el proveedor
modifique el contenido de la propiedad: por ejemplo, asignando los nombres de argumento definidos con ADO a sus
equivalentes en el proveedor. La propiedad ConnectionString hereda automticamente el valor que se utiliza con el
argumento Connections del mtodo Open para que se pueda hacer caso omiso de la propiedad connectionString actual
durante la llamada al mtodo Open. Debido a que el argumento File Name hace que ADO cargue el proveedor asociado.
no se pueden pasar ambos argumentos, Provider y File Name. La propiedad ConnectionString es de lectura/esctura
cuando la conexin est cerrada y de slo lectura cuando est abierta.

Uso de Remote Data Service. Cuando se usa el objeto Connection del lado del cliente, la propiedad ConnectionString
solamente puede incluir los parmetros Remote provider y Remote Server

Count, propiedad (ADO)

Indica el nmero de objetos de una coleccion.

Devuelve un valor Long.

Se aplica a

Coleccin Errors (ADO). Coleccin Fields (ADO) Coleccin Parameter (ADO). Coleccin Properties (ADO).

Use la propiedad Count para determinar cuntos objetos hay en una coleccin dada. Debido a que la numeracin de
miembros de una coleccin empieza por cero, debe codificar siempre los bucles empezando siempre con el miembro cero
y terminando con el valor de la propiedad Count menos 1. Si est usando Microsoft Visual Basic y desea hacer un
recorrido por los miembros de una coleccin sin comprobar la propiedad Count use el comando For Each...Next. Si la
propiedad Count es cero. no hay ningn objeto en la coleccin.

CursorLocation, propiedad (ADO) Descripcin

Establece o devuelve la posicin de un motor de cursores.

Se aplica a

Objeto Connection (ADO), Objeto Recordset (ADO).

Establece o devuelve un valor Long que se puede establecer a alguna de las siguientes constantes:

Constante Descripcin
No se usan servicios de cursor. (Esta constante es obsoleta y aparece nicamente por compatibilidad
adUseNone
con versiones anteriores.)
Usa cursores del lado del cliente suministrados por una biblioteca de cursores locales. Los motores de
cursores locales admitirn a menudo muchas caractersticas que los cursores proporcionados por
adUseClient controladores no admitirn; por tanto, el uso de esta configuracin puede proporcionar una ventaja
con respecto a caractersticas que sern habilitadas. Por compatibilidad con versiones anteriores. se
admite tambin el sinnimo adUseClientBatch.
Predeterminado. Usa cursores suministrados por el controlador o por el proveedor de datos. Estos
cursores son, en ocasiones. muy flexibles y conceden un margen de sensibilidad adicional a los
adUseServer cambios realizados por otros usuarios en el origen de datos. No obstante. algunas caractersticas de
Microsoft Client Cursor Provider (como los conjuntos de registros disociados) no pueden ser
simuladas con cursores del lado del servidor y no estarn disponibles con esta configuracin.

Esta propiedad le permite elegir entre distintas bibliotecas de cursores accesibles para el proveedor. Normalmente,

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (6 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

puede elegir entre usar una biblioteca de cursores del lado del cliente o una ubicada en el servidor.

El valor de esta propiedad afecta solamente a las conexiones establecidas despus de que se haya establecido la
propiedad. Los cambios en la propiedad CursorLocation no afectan a las conexiones existentes. Esta propiedad es de
lectura/escritura en un Connection o Recordset cerrado, y de slo lectura en un Recordset abierto. Los cursores de
Connection.Execute heredarn esta configuracin. Los objetos Recordset heredarn automticamente esta configuracin
de sus conexiones asociadas.

Uso de Remote Data Service. Cuando se usa en un objeto Recordset o Connection (ADOR) del lado del cliente, la
propiedad CursorLocation slo se puede establecer a adUseClient:

Direction, propiedad (ADO)

Indica si Parameter representa un parmetro de entrada, un parmetro de salida o ambos bien, si el parmetro es el
valor devuelto por un procedimiento almacenado. Se aplica a

Objeto Parameter (ADO).

Establece o devuelve uno de los siguientes valores de ParameterDirectionEnum:

Constante Descripcin
adParamUnknown Indica que la direccin del parmetro es desconocida.
adParamlnput Valor predeterminado. Indica un parmetro de entrada.
adParamOutput Indica un parmetro de salida.
adParamlnputOutput Indica un parmetro de entrada y otro de salida.
adParamReturnValue Indica un valor devuelto.

Utilice la propiedad Direction para especificar cmo se pasa un parmetro hacia o desde un procedimiento. La propiedad
Direction es de lectura/escritura; esto le permite trabajar con proveedores que no devuelven esta informacin o
establecer esta informacin cuando desea que ADO realice una llamada adicional al proveedor para recuperar
informacin acerca del parmetro. No todos los proveedores pueden determinar la direccin de los parmetros en sus
procedimientos almacenados. En estos casos, debe establecer la propiedad Direction antes Ejecutar la consulta.

Ejemplo
Este ejemplo utiliza las propiedades ActiveConnection, CommandText, CommandTimeout, CommandType. Size y
Direction para ejecutar un procedimiento almacenado:

Public Sub ActiveConnectionX()

Dim cnn1 As ADODB.Connection


Dim cmdByRoyalty As ADODB.Command
Dim prmByRoyalty As ADODB.Parameter
Dim rstByRoyalty As ADODB.Recordset
Dim rstAuthors As ADODB.Recordset
Dim intRoyalty As Integer
Dim strAuthorID As String
Dim strCnn As String

' Define a command object for a stored procedure.


Set cnn1 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
cnn1.Open strCnn
Set cmdByRoyalty = New ADODB.Command
Set cmdByRoyalty.ActiveConnection = cnn1
cmdByRoyalty.CommandText = "byroyalty"
cmdByRoyalty.CommandType = adCmdStoredProc
cmdByRoyalty.CommandTimeout = 15

' Define the stored procedure's input parameter.


intRoyalty = Trim(InputBox( _
"Enter royalty:"))

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (7 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

Set prmByRoyalty = New ADODB.Parameter


prmByRoyalty.Type = adInteger
prmByRoyalty.Size = 3
prmByRoyalty.Direction = adParamInput
prmByRoyalty.Value = intRoyalty
cmdByRoyalty.Parameters.Append prmByRoyalty

' Create a recordset by executing the command.


Set rstByRoyalty = cmdByRoyalty.Execute()

' Open the Authors table to get author names for display.
Set rstAuthors = New ADODB.Recordset
rstAuthors.Open "authors", strCnn, , , adCmdTable

' Print current data in the recordset, adding


' author names from Authors table.
Debug.Print "Authors with " & intRoyalty & _
" percent royalty"
Do While Not rstByRoyalty.EOF
strAuthorID = rstByRoyalty!au_id
Debug.Print , rstByRoyalty!au_id & ", ";
rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
Debug.Print rstAuthors!au_fname & " " & _
rstAuthors!au_lname
rstByRoyalty.MoveNext
Loop

rstByRoyalty.Close
rstAuthors.Close
cnn1.Close

End Sub

PageCount, propiedad (ADO)

Indica cuntas pginas de datos contiene el objeto Recordset.

Se aplica a

Objeto Recordset (ADO).

Devuelve un valor de tipo Long.

Utilice la propiedad PageCount para determinar cuntas pginas de datos hay en el objeto Recordset. Las pginas son
grupos de registros cuyo tamao es igual al valor de la propiedad PageSize. Incluso si la ltima pgina no est completa,
debido a que hay menos regstros que el valor de la propiedad PageSize, se cuenta como una pgina adicional en el
valor de PageCount.
Si el objeto Recordset no admite esta propiedad, el valor ser -l para indicar que no se puede determinar el valor de
PageCount. Vea las propiedades PageSize y AbsolutePage para obtener ms informacin acerca de la funcionalidad de
las pginas.

Ejemplo

Este ejemplo utiliza las propiedades AbsolutePage, PageCount y PageSize para visualizar nombres y tomar fechas de la
tabla Empleado cinco registros cada vez:

Public Sub AbsolutePageX()

Dim rstEmployees As ADODB.Recordset


Dim strCnn As String
Dim strMessage As String
Dim intPage As Integer
Dim intPageCount As Integer

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (8 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

Dim intRecord As Integer

' Open a recordset using a client cursor


' for the employee table.
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
Set rstEmployees = New ADODB.Recordset
' Use client cursor to enable AbsolutePosition property.
rstEmployees.CursorLocation = adUseClient
rstEmployees.Open "employee", strCnn, , , adCmdTable

' Display names and hire dates, five records


' at a time.
rstEmployees.PageSize = 5
intPageCount = rstEmployees.PageCount
For intPage = 1 To intPageCount
rstEmployees.AbsolutePage = intPage
strMessage = ""
For intRecord = 1 To rstEmployees.PageSize
strMessage = strMessage & _
rstEmployees!fname & " " & _
rstEmployees!lname & " " & _
rstEmployees!hire_date & vbCr
rstEmployees.MoveNext
If rstEmployees.EOF Then Exit For
Next intRecord
MsgBox strMessage
Next intPage
rstEmployees.Close

End Sub

PageSize, propiedad (ADO)

Indica cuntos registros constituyen una pgina en el objeto Recordset.

Se aplica a

Objeto Recordset (ADO).

Establece o devuelve un valor de tipo Long que indica cuntos registros hay en una pgina. El valor predeterminado es
10.

Utilice la propiedad PageSize para determinar cuntos registros componen una pgina lgica de datos. Al establecer un
tamao de pgina, puede utilizar la propiedad AbsolutePage para moverse al primer registro de una pgina especfica.
Esto es til en las situaciones de servidor Web cuando se desea permitir que el usuario pase pginas de datos y vea
cierto nmero de registros al mismo tiempo. Esta propiedad se puede establecer en cualquier momento y su valor se
utilizar para calcular la ubicacin del primer registro de una pgina especfica.

RecordCount, propiedad (ADO)

Indica el nmero actual de registros de un objeto Recordset.

Se aplica a

Objeto Recordset (ADO).

Devuelve un valor de tipo Long.

Utilice la propiedad RecordCount para averiguar cuntos registros hay en un objeto Recordset. La propiedad devuelve -1
cuando ADO no puede determinar el nmero de registros. Al leer la propiedad RecordCount de un objeto Recordset
cerrado, se produce un error. Si el objeto Recordset admite el posicionamiento aproximado o los marcadores, es decir, si
las propiedades Supports (adApproxPosition) o Supports (adBookmark), respectivamente, devuelven True, este valor

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (9 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

ser el nmero exacto de registros del objeto Recordset independientemente de si se ha llenado completamente. Si el
objeto Recordset no admite el posicionamiento aproximado, esta propiedad puede consumir muchos recursos debido a
que ser necesario recuperar y contar todos los recursos para devolver un valor preciso de RecordCount.

Ejemplo
Este ejemplo utiliza la propiedad Filter para abrir un Recordset nuevo basado en una condicin especfica aplicada a un
Recordset existente. Utiliza la propiedad RecordCount para mostrar el nmero de registros en los dos Recordsets. Es
necesaria la funcin FilterField para que funcione este procedimiento:

Public Sub FilterX()

Dim rstPublishers As ADODB.Recordset


Dim rstPublishersCountry As ADODB.Recordset
Dim strCnn As String
Dim intPublisherCount As Integer
Dim strCountry As String
Dim strMessage As String

' Open recordset with data from Publishers table.


strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
Set rstPublishers = New ADODB.Recordset
rstPublishers.CursorType = adOpenStatic
rstPublishers.Open "publishers", strCnn, , , adCmdTable

' Populate the Recordset.


intPublisherCount = rstPublishers.RecordCount

' Get user input.


strCountry = Trim(InputBox( _
"Enter a country to filter on:"))

If strCountry <> "" Then


' Open a filtered Recordset object.
Set rstPublishersCountry = _
FilterField(rstPublishers, "Country", strCountry)

If rstPublishersCountry.RecordCount = 0 Then
MsgBox "No publishers from that country."
Else
' Print number of records for the original
' Recordset object and the filtered Recordset
' object.
strMessage = "Orders in original recordset: " & _
vbCr & intPublisherCount & vbCr & _
"Orders in filtered recordset (Country = '" & _
strCountry & "'): " & vbCr & _
rstPublishersCountry.RecordCount
MsgBox strMessage
End If
rstPublishersCountry.Close

End If

End Sub

Public Function FilterField(rstTemp As ADODB.Recordset, _


strField As String, strFilter As String) As ADODB.Recordset

' Set a filter on the specified Recordset object and then


' open a new Recordset object.
rstTemp.Filter = strField & " = '" & strFilter & "'"
Set FilterField = rstTemp

End Function

Nota: Cuando sabe los datos que desea seleccionar, suele ser ms eficiente abrir un Recordset con una sentencia SQL.

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (10 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Modulo 5/4

Este ejemplo muestra cmo puede crear un nico Recordset y obtener registros de un pas en particular.

Public Sub FilterX2()

Dim rstPublishers As ADODB.Recordset


Dim strCnn As String

' Open recordset with data from Publishers table.


strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog= pubs;UserId=sa;Password=; "
Set rstPublishers = New ADODB.Recordset
rstPublishers.CursorType = adOpenStatic
rstPublishers.Open "SELECT * FROM publishers " & _
"WHERE Country = 'USA'", strCnn, , , adCmdText

' Print current data in recordset.


rstPublishers.MoveFirst
Do While Not rstPublishers.EOF
Debug.Print rstPublishers!pub_name & ", " & _
rstPublishers!country
rstPublishers.MoveNext
Loop

rstPublishers.Close

End Sub

Sort, propiedad (ADO)

Especifica uno o ms nombres de campos por los que se ordena el objeto Recordset y si cada campo se ordena de forma
ascendente o descendente.

Configuracin y valores devueltos

Establece o devuelve un valor de tipo String con los nombres de los campos utilizados para ordenar separados por
comas, donde cada nombre es un objeto Field del objeto Recordset Y, opcionalmente, est seguido de un espacio en
blanco y de la palabra clave ASCENDING o DESCENDING, que especifica el orden del campo.

Los datos no se vuelven a ordenar fsicamente, sino que, simplemente, se tiene acceso a los mismos en el orden
indicado. Se crear un ndice temporal para cada uno de los campos especificados en la propiedad Sort si la propiedad
CursorLocation se establece a adUseClient y no existe ya un ndice. Al establecer la propiedad Sort a una cadena vaca.
se restablecen las filas a su orden original y se eliminan los ndices temporales. Los ndices existentes no se eliminarn.

< Programa < Tema3

http://www.sqlmax.com/centro/moduloV_4.asp?MX= (11 de 11)20/11/2007 04:06:04 a.m.


SQL SERVER Manual en Linea - Ejercicios

SQL SERVER 2000: Diseo, implementacin, conexin, consulta y actualizacin de datos de una base de datos

MODULO I

Ejercicio 2: Desarrolle un Modelo Lgico de Datos

En este ejercicio, usted se entrenar en los pasos necesarios para crear un modelo lgico de datos. Este ejercicio
involucra dibujar las tablas, entidades, y relaciones entre entidades que constituyen la base de datos. Aunque usted
puede usar un programa del dibujo como Visio para crear estos objetos; papel y un lpiz es todo que usted realmente
necesita. Si lo desea, usted puede transferir luego su modelo a un programa del dibujo. Adems, usted necesitar papel
y un lpiz para escribir las restricciones a los datos. Tambin puede escribirlos directamente en un documento de un
procesador de palabras. Cualquiera que sea el mtodo que usted escoja, deber guardar el resultado para los ejercicios
subsecuentes. Para realizar este ejercicio, usted usar el caso de la tienda de libros de Ejercicio 1 del Tema 4 de este
mdulo.

Para identificar qu tablas agregar a una base de datos


1. Refirase a los requisitos de diseo que usted desarroll para el caso de la tienda de libros y apunte las categoras de
datos.
Cada categora representa uno de los objetos tabla primarios en su diseo de la base de datos.

2. Dibuje una tabla para cada categora de datos. Las tablas deben ser lo suficientemente grandes para que usted pueda
agregar los nombres de las columnas. Ponga las tablas en un modo que le permita dibujar las relaciones entre las tablas.
Usted agregar los nombres de la columna y definir las relaciones mas adelante en este ejercicio. Su dibujo debera
incluir cinco tablas.

3. Etiquete cada tabla con el nombre de cada una de las categoras. Para consistencia, use las etiquetas siguientes para
los nombres de las tablas: Libros, Autores, Empleados, Clientes, y Ordenes.

Su prximo paso ser identificar cualquier tabla relacionada. A estas alturas, disear una base de datos se pone un poco
ms complicado. Una buena fuente para determinar las relaciones entre tablas es la lista de reglas comerciales que
usted identific cuando usted recogi los requisitos de diseo. Esencialmente, usted est buscando subcategoras de
informacin o reglas de negocio que lo llevan a creer que son necesarias tablas adicionales. Recuerde, usted puede
modificar el diseo de la base de datos cuando usted identifica relaciones entre tablas y restricciones sobre los datos.

4. Refirase a las reglas comerciales en los requisitos de diseo. Fjese que hay cuatro subcategoras de informacin: la
condicin de un libro, la posicin del empleado, la forma de pago, y el estado de la orden.

5. Dibuje las cuatro tablas relacionadas para soportar las tablas primarias.
Para consistencia, use los nombres siguientes para sus nuevas tablas: EstadoOrden, FormaDePago, Posiciones, y
CondicionLibro.

6. Refirase a las reglas comerciales en los requisitos de diseo. Fjese que una orden puede contener ms de un libro.

7. Agregue una tabla ms (OrdenLibros) para rastrear los libros pedidos y las rdenes tomadas a los clientes.

Usted ahora debera tener 10 tablas.

Para identificar qu columnas agregar a las tablas


1. Refirase a los requisitos de diseo que usted desarroll para el caso de la tienda de libro.
Para cada categora de datos, usted defini qu informacin debe ser incluida en cada categora. Esta informacin
constituye sus columnas.

2. Agregue nombres a las columnas de cada tabla. Tambin recuerde que cada fila en una tabla debe ser singularmente
identificable, por lo que algunas tablas podran necesitar un identificador.

Adems, en donde los nombres de las columnas se refirieran a informacin en una tabla relacionada, usted normalmente
slo necesitar la columna del identificador de la tabla relacionada. Por ejemplo, la tabla Ordenes incluira una columna
de EstadoID que la referencia a la tabla de EstadoOrden.

http://www.sqlmax.com/centro/EjercicioI_2.asp?MX= (1 de 6)20/11/2007 04:06:29 a.m.


SQL SERVER Manual en Linea - Ejercicios

Para consistencia, use las etiquetas siguientes para los nombres de las columnas:

Tabla Columnas
Libros LibroID, Titulo, AutorID, Editor, FechaEd, Costo, CondicioID, Vendido
LibrosEstado CondicionID, NombreCond, Descripcion
Autores AutorID, Apellido, Nombre, AoNac, AoMuerte, Descripcion
Empleados EmpleadosID, Nombre, Apellido, Dir1, Dir2, Ciudad, Estado, CP, FechaIng, PosicionID
Posiciones PosicionID, Cargo, Descripcion
Clientes ClienteID, Nombre, Apellido, Telefono, Dir1, Dir2, Ciudad, Estado, CP
Ordenes OrdenID, ClienteID, EmpleadoID, Monto, FechaOrden, FechaEnvio, PagoID, EstadoID
EstadoOrden EstadoID, EstadoDescrip
FormaDePago PagoID, PagoDescrip
LibrosOrdenes OrdenID, LibroID

Fjese que la tabla Clientes no incluye una columna para los libros comprados y fecha de compra. Dado que cada cliente
puede comprar ms de un libro, usted no incluir esta informacin aqu. Usted podra crear una tabla para guardar esta
informacin, pero sera innecesario porque reproducira informacin que ya existe en la base de datos (informacin que
puede derivarse a travs de vistas o consultas).

Para identificar relaciones entre las entidades

1. Determine qu relaciones existen entre la tabla Libros y otras tablas en la base de datos. Si necesita, refirase al caso
de la tienda de libro y a los requisitos de diseo que lo ayudarn a determinar qu relaciones existen entre los objetos.

Usted est buscando relaciones directas. Por ejemplo, la tabla Libros tiene una relacin directa con la tabla LibrosEstado.
Los datos de LibrosEstado aplica directamente a los datos de Libros. Adems, los datos de Autores se relacionan
directamente con los datos de Libros (los autores escriben libros). Hay tambin una relacin directa entre los datos de
Libros y los datos LibrosOrdenes (los rdenes incluyen los libros que se venden).

Fjese, que no hay ninguna relacin directa entre las tablas Libros y la tabla Ordenes. La relacin entre las dos tablas es
indirecta y se expresa a travs de la tabla de LibrosOrdenes.

2. Para cada tabla, trace una lnea desde esa tabla a cualquier otra tabla con la que exista una relacin. Usted podra
encontrar que necesita mover algunas de sus tablas para mostrar esas relaciones ms claramente.

Su diseo de la base de datos debe parecer similar al esquema en Figura 5.6.

http://www.sqlmax.com/centro/EjercicioI_2.asp?MX= (2 de 6)20/11/2007 04:06:29 a.m.


SQL SERVER Manual en Linea - Ejercicios

Figura 5.6 Identificar las relaciones entre las tablas en el modelo de lgico datos.

3. Determine si cada relacin es uno-a-uno, uno-a-muchos, o muchos-a-muchos. Escriba el nmero 1 en el extremo


"uno" de la relacin, y escriba el smbolo infinito (8) en el extremo "muchos" de la relacin.

Para determinar el tipo de relacin, piense en los trminos de los datos asociados con cada objeto. Por ejemplo, existe
una relacin entre los empleados y los rdenes que ellos generan. Un empleado puede crear muchos rdenes, pero una
orden es creada por slo un empleado. Por consiguiente, una relacin uno-a-muchos existe entre la tabla Ordenes y la
tabla Empleados (un empleado puede crear muchas rdenes). La tabla Empleados est en el lado "uno" de la relacin, y
la tabla Ordenes en el lado "muchos".

Su base de datos debe parecer similar ahora al esquema en Figura 5.7.

http://www.sqlmax.com/centro/EjercicioI_2.asp?MX= (3 de 6)20/11/2007 04:06:29 a.m.


SQL SERVER Manual en Linea - Ejercicios

Figura 5.7 Identificar los tipos de relaciones entre las tablas en el modelo de los datos lgico.

4. Identifique las relaciones muchos-a-muchas en el diseo de la base de datos.


Qu relaciones son muchos-a-muchos?

5. Cree que una tabla de la unin llamada LibrosAutores. La tabla debe incluir la columna de AutorID y la columna de
LibroID.

6. Anule la relacin entre la tabla Libros y la tabla Autores, entonces anule la columna de AutorID en la tabla Libros.

Usted est anulando la relacin entre las dos tablas porque una relacin directa ya no existe. En cambio, una relacin
indirecta se crea a travs de la tabla de LibrosAutores. Adems, la columna AutorID no es mas un requisito en la tabla
Libros porque la relacin libro/autor se expresa en la tabla LibrosAutores.

7. Dibuje la relacin entre los Autores y tablas LibrosAutores y la relacin entre los Libros y tablas LibrosAutores.

8. Determine los tipos de relaciones que existen con la tabla LibrosAutores.

Su diseo de la base de datos debe parecer similar ahora al esquema en Figura 5.8.

http://www.sqlmax.com/centro/EjercicioI_2.asp?MX= (4 de 6)20/11/2007 04:06:29 a.m.


SQL SERVER Manual en Linea - Ejercicios

Figura 5.8 Agregar la tabla de LibrosAutores al modelo de datos lgico.

Para identificar restricciones en los datos

1. En una hoja de papel, apunte los nombres de cada tabla en su diseo de base de datos. Deje espacio suficiente entre
cada nombre de la tabla para escribir las restricciones de los datos.

2. Repase la regla comercial que declara que informacin del libro se debe incluir: ttulo, autor, costo, precio sugerido,
evaluacin, y ID nico.

3. Identifique el objeto al que esta regla de negocio se aplica.

A qu objecto/s aplica esta regla de negocio?

4. Bajo los nombre de la tabla Libros y de la tabla LibrosAutores, escriba las restricciones a los datos que se pueden
derivar de la regla comercial.

Cules son las restricciones a los datos?

5. Para cada regla comercial, defina las restriccin a los datos. Donde sea aplicable, escriba las restricciones bajo el
nombre de la tabla. Si una restriccin no es aplicable especficamente a una tabla, escrbalo en otro espacio en su papel.

Cules son las restricciones a los datos para su diseo de la base de datos?

http://www.sqlmax.com/centro/EjercicioI_2.asp?MX= (5 de 6)20/11/2007 04:06:29 a.m.


SQL SERVER Manual en Linea - Ejercicios

6. Repase las restricciones a los datos que usted cre para asegurarse que cada tabla y cada columna dentro de esas
tablas tienen alguna clase de regla asociada con l.

< Programa < Tema 5

http://www.sqlmax.com/centro/EjercicioI_2.asp?MX= (6 de 6)20/11/2007 04:06:29 a.m.

Você também pode gostar