Sunteți pe pagina 1din 96

SQLSERVER 2005

Instalacin de SQLSERVER 2005

INSTALACIN DEL SQL SERVER 2005 SQL Server 2005 Express


Para la instalacin del SQL, se tomara el primer archivo llamado SQLExpress.EXE, se lo ejecuta y saldr la siguiente pantalla:

Se espera unos minutos, hasta que extraiga los programas de instalacin. Luego aparecer la siguiente pantalla donde se debe aceptar la clave y presionar Next>

Drac----2

Instalacin de SQLSERVER 2005

Una vez verificado los requisitos de instalacin se presiona el botn Next>.Y se verificara la configuracin.

Aparecer esta pantalla y se presiona el botn Next>

Drac----3

Instalacin de SQLSERVER 2005

Volvemos presionar Next>

Luego aparecer esta pantalla:

Drac----4

Instalacin de SQLSERVER 2005

Se deber colocar o dejar como est el nombre y la compaa, es mejor dejarlo as y damos Next>

Drac----5

Instalacin de SQLSERVER 2005

Se deber seleccionar las caractersticas de los componentes que se desee instalar. Para esto del clic a la X rojas y selecciones todos los componentes

Y quedara as como se muestra en la siguiente pantalla

Drac----6

Instalacin de SQLSERVER 2005

Puede instalar una instancia predeterminada o especificar una instancia con nombre. Esto se refiere al cualquier nombre que le pueda dar para luego identificarla.

Luego presinamos Next>

Drac----7

Instalacin de SQLSERVER 2005

Una vez seleccionada la opcin Mixed, ingresamos la clave o password, utilice claves mayor a 8 dgitos, esto para no tener problemas de seguridad, y presionamos Next>

En esta siguiente pantalla solamente damos Next y no seleccionamos ninguna opcin:

Drac----8

Instalacin de SQLSERVER 2005

En la siguiente pantalla se indicara los programas que van hacer instalados y damos Next>

Esta pantalla nos indicara los programas que se instalaron en caso que haya errores es mejor corregirlos y volver a instalar, damos Next>

Drac----9

Instalacin de SQLSERVER 2005

En esta pantalla nos indicara que ha finalizado la configuracin e instalacin de los programas y proceder la verificacin cuando le demos Finish

Con esta instalacin se termina la ejecucin del primer archivo.

Drac----10

Instalacin de SQLSERVER 2005

A continuacin se ejecutara el siguiente archivo SQLServer2005_SSManagementSEE, luego de ejecutar el programa aparecer la siguiente pantalla

En la siguiente pantalla se indicara que se instalara el SQL SERVER MANAGEMENT STUDIO EXPRESS CTP. Y presiona el botn Next>

Drac----11

Instalacin de SQLSERVER 2005

Aceptamos la licencia y presionamos Next>.

Se nos pedir registrar para esta instalacin de nuevo el nombre, luego de modificado presionamos Next>.

Drac----12

Instalacin de SQLSERVER 2005

Luego presentara la siguiente pantalla con las caractersticas de los programas a instalarse en caso de que aparezcan con X, se deber seleccionar todos los componentes, para nuestro caso no apareci ninguna X. Luego se realizar lo indicado presionamos Next>.

Drac----13

Instalacin de SQLSERVER 2005

Esta pantalla le indicara que proceder con la instalacin, cuando estemos preparados damos Install.

Una vez instalado aparecer la siguiente pantalla, y podemos usar el producto.

Drac----14

Instalacin de SQLSERVER 2005

Introduccin a Base de Datos


Conceptos bsicos
En el sentido ms amplio, se podra considerar que una base de datos es simplemente un conjunto de informacin. En un computador, esta informacin normalmente ser bsicamente una serie de fichas. Por ejemplo, una base de datos muy sencilla podra ser una agenda de direcciones en la que anotemos datos de nuestros amigos. Tendramos una ficha para cada uno de estos amigos. En cada ficha, a su vez, existir una serie de apartados, como el nombre, la direccin, el telfono, etc. Esto nos permite introducir dos primeros conceptos que utilizaremos: cada una de estas fichas recibe el nombre de registro, y cada uno de los apartados que componen las fichas se llama campo. El conjunto de las fichas (registros) forma un bloque de informacin, que llamaremos tabla, y que se suele representar escribiendo cada ficha (registro) en una fila y cada apartado (campo) en una columna, as: NOMBRE PABLO CANO JESUS ABRIL JUAN BORJA DIRECCION AV.UNO Y CALLE D CALLE DOS Y TERCERA ALAJUELA Y GARCIA MORENO CIUDAD GUAYAQUIL MANTA PORTOVIEJO TELEFONO 2232424 3423664 30330303

Pero en la prctica, una base de datos real suele estar formada por ms de una tabla. Por ejemplo, la base de datos que utiliza una empresa normal para su gestin deber almacenar datos sobre clientes, proveedores, artculos, facturas, etc. Cada uno de estos bloques de datos ser una tabla, y estas tablas estarn relacionadas entre s (por ejemplo: un artculo ser suministrado por un cierto proveedor, y ese artculo aparecer en ciertas facturas, cada una de las cuales corresponder a un cierto cliente).

Drac----15

Instalacin de SQLSERVER 2005

Todo este conjunto de informacin que forman las tablas y las relaciones entre ellas (y alguna cosa ms que ya veremos) ser nuestra base de datos. En concreto, se tratar de lo que se conoce como una base de datos relacional. En este texto veremos las nociones bsicas de cmo se crea y se maneja una base de datos: cmo disear las tablas y las relaciones, cmo introducir los datos y como buscar informacin en la base de datos.

Terminologa Bsica En Bases De Datos

Es obvio que entre el computador, tratando con bits, y el usuario final, tratando con abstracciones tales como sueldos, horas trabajadas, etc., hay bastantes niveles de abstraccin. La base de datos fsica reside permanentemente en un almacenamiento secundario (Discos duros y cintas principalmente). Podemos visualizar a la base de datos fsica a s misma con varios niveles de abstraccin, como por ejemplo, partiendo por aquellos archivos y registros en un lenguaje de programacin como Visual Basic, Java o C+, pasando a travs de los archivos y registros lgicos soportados por el Sistema Operativo, hasta llegar a los bits y las direcciones fsicas en los dispositivos de almacenamiento. La base de datos conceptual es una abstraccin del mundo real respecto a una empresa. El SABD provee un DDL para especificar el modelo conceptual a travs del modelo fsico. El DDL es un lenguaje de alto nivel que nos permite describir la base de datos conceptual en trminos de un modelo de datos. Una vista o subes quema es un modelo abstracto de una porcin de una BDD. Algunos (si no todos) los SABD proveen habilidades para declarar vistas y para expresar consultas y operaciones sobre las vistas. Por ende, una vista es una pequea BDD conceptual, y est definida al mismo nivel de abstraccin que la BDD conceptual.

Introduccin al Modelamiento de Datos Sistema de Administracin de Bases de datos (S.A.B.D. o D.B.M.S.)

Drac----16

Instalacin de SQLSERVER 2005

El mayor rol de un SABD es permitir al usuario interactuar con los datos en trminos abstractos distintos a los que utiliza el computador para almacenarlos. En este sentido, el SABD acta como un intrprete de un lenguaje de programacin de muy alto nivel, permitiendo al usuario especificar qu se debe hacer con muy poco o nada de conocimiento de los detallados algoritmos o representaciones de los datos usados por el sistema. As, en el caso de los SABD hay menos relacin entre los datos como los ve el usuario y la representacin de esos arreglos en memoria. Los SABD son unos de los software ms complejos que se han desarrollado. Pensando en esos trminos, consideremos que un usuario de una BDD tiene muy pocos (si no ningn) conocimientos de programacin y desea obtener cierta informacin especfica de de la base de datos, podra el mismo formular las consultas a la BDD de la siguiente forma: Cuntos sueldos son mayores a $300.000? IMPRIMIR NOMBRES DONDE SUELDO > 300000; La siguiente figura muestra lo que realiza el SABD cuando se le entrega una consulta.

Al realizar una consulta directamente desde un intrprete de SQL (SQL+, MS-QUERY, ISQL, etc.) ocurre lo siguiente: Primero es manejada por el procesador de consultas (este es un tipo de compilador de consultas, pero que en vez de generar

Drac----17

Instalacin de SQLSERVER 2005

cdigo objeto o lenguaje de mquina, genera una serie de comandos que son 'pasados' a las dems partes del SABD). Como el procesador de consultas necesita conocer la estructura de la BDD, accesa la informacin que est en la definicin de la BDD. La consulta procesada es entregada a una serie de rutinas (manejador de la BDD). Uno de los roles del manejador de la BDD es traducir la consulta en trminos tales que el administrador de archivos la comprenda, esto es, en operaciones con archivos generalmente (Lea del archivo "X" los registros entre el "A y el T", y devulvame los campos "Z, W y Q"). El manejador de archivos puede ser el sistema de archivos provisto por el Sistema Operativo o un sistema de archivos que conozca la forma particular en que los datos estn almacenados (Oracle, SQLServer, MS-Access, etc.). La transformacin de las consultas en operaciones debe ser lo ms trivial posible, ya que la BDD puede ser representada en forma de estructuras muy complejas. El propsito de estas estructuras es hacer el acceso y manipulacin de la BDD lo ms rpido y simple posible. El manejador de la base de datos cumple una serie de tareas, entre las cuales podemos destacar:

1. Seguridad:
No toda la informacin puede ser vista por todos los usuarios. Para este propsito, se deben identificar con un nombre de usuario y una contrasea, adems de que cada usuario puede accesar la informacin a las que se les de permiso.

2. Integridad:

Ciertas clusulas de reservas de integridad (propiedades requeridas por los datos) pueden ser chequeadas por el SABD. Es muy recomendable realizar algunos chequeos cuando el usuario realiza ciertas operaciones sobre los datos en el DML, tales como insertar, eliminarlos o modificarlos (por ejemplo, no eliminar a un deudor si an posee deuda sin cancelar, no poder modificar el estado de un deudor si no ha cancelado la primera cuota, etc.).

3. Sincronizacin:
A menudo tendremos muchos usuarios accesando los datos en una BDD simultneamente. El SABD provee cierta proteccin acerca de inconsistencias producto de dos simultneas sobre un dato por ejemplo, dos personas modificando simultneamente el monto de la deuda de cierto deudor. Si el SABD no secuencia

Drac----18

Instalacin de SQLSERVER 2005

dichas transacciones, podramos estar cobrando el doble del valor adeudado al deudor.

Mientras un usuario de una seccin puede tener algunos conocimientos acerca de programacin, pudiendo efectuar consultas sencillas a la base de datos:

DESPLIEGUE MONTO DESDE LA TABLA SUELDOS


Su jefe no necesariamente puede tener conocimiento programacin, as que el simplemente quiere ejecutar siguiente para obtener la misma informacin: de lo

EJECUTE SUELDOS
Programas como "SUELDOS" son almacenados permanentemente y estn disponibles para los usuarios son llamados Programas de aplicacin. El responsable de la creacin de estos programas se llama Programador de Aplicaciones, que es un profesional que escribe y mantiene programas. El camino que utilizan estos programas es el descrito en la figura anterior como "Programas". Este programa es escrito una vez, y es compilado por el procesador de consultas y almacenado en el sistema de archivos manejado por el SABD. La versin compilada del programa es invocada a travs de comandos y no necesita pasar por las fases de compilacin y optimizacin, como lo hacen las consultas directas. Hay un camino indicado en la figura como "Esquema", en el cual la descripcin de la BDD se modifica a s misma. Esto es el programa DDL (Data definition Language - Lenguaje de descripcin de datos) que describe a la BDD es modificado y recompilado en una nueva descripcin que reemplaza a la anterior. Esta operacin es muy poco frecuente, pero una de las ms importantes, y una persona solamente la puede ejecutar: el Administrador de la BDD, el cual tiene "permisos" para modificar la BDD en toda su extensin. Algunas de las responsabilidades del Administrador de la BDD son:

La creacin de la descripcin original de la estructura de la BDD y la forma en que se reflejarn en los archivos de la BDD fsica. El otorgar a los distintos usuarios los permisos para accesar la BDD o partes de la misma. Las modificaciones en la descripcin de la BDD o sus relaciones con la BDD fsica. El realizar respaldos peridicos a la BDD y reparar los posibles daos en la BDD debido a fallos del hardware.

Drac----19

Instalacin de SQLSERVER 2005

Modelos de Datos
Un modelo de datos define las reglas por las cuales los datos son estructurados. Esta estructuracin, sin embargo, no da una interpretacin completa acerca del significado de los datos, y la forma en que sern usados.

Modelo Lgico
Recibe como entrada el esquema conceptual y da como resultado un esquema lgico, que es una descripcin de la estructura de la base de datos que puede procesar el software DBMS.

Modelo Fsico
Recibe como entrada el esquema lgico y da como resultado un esquema fsico, que es una descripcin de la implementacin de una base de datos en la memoria secundaria, describe las estructuras de almacenamiento y los mtodos usados para tener un acceso efectivo a los datos.

MODELO CONCEPTUAL
Conjunto de conceptos y de reglas destinados a representar de forma global los aspectos lgicos de los diferentes tipos de datos existentes en la realidad que est siendo analizada; ha de permitir reflejar el contenido semntico de los datos existentes en el sistema, pero no sus propiedades que respondan a caractersticas de tipo fsico (modo de almacenamiento, caminos de acceso, etc...)

MODELO ENTIDAD RELACION


Es la abstraccin de la realidad mediante un modelo utilizando para esto entidades y atributos, ayudados mediante las reglas semnticas del lenguaje para su mayor integridad y exactitud, se basa en una relacin, una tabla bidimensional. Los renglones de la tabla representan los registros y las columnas muestran los atributos de la entidad. El modelo entidad relacin es un diagrama, que como su nombre lo indica, est compuesto de dos partes principales que son las entidades y las relaciones entre stas. Este diagrama es el resultado del anlisis que se realiza para cada sistema de informacin que se desea desarrollar.

Drac----20

Instalacin de SQLSERVER 2005

Las reglas semnticas son criterios que existen acerca del comportamiento de los valores que pueden tomar los atributos o dominios, con el fin de darles consistencia a la informacin.

ENTIDAD
Una entidad es una cosa o un objeto con significado real o imaginado, acerca de la cual existe la necesidad de informacin que se va a conocer o a mantener, de un conjunto de datos homogneos, con atributos y caractersticas especiales.

Representacin Grfica
Una entidad se representa con un rectngulo con esquinas redondeadas dentro del cual se escribe el nombre correspondiente para su identificacin. El nombre se muestra en SINGULAR en letras MAYSCULAS, y sin ABREVIATURAS, adems debe ser el que represente un tipo o clase de elemento, NO UNA INSTANCIA. Un ejemplo de clase es alumno y una instancia es Juanito, por tanto la entidad debe ser ALUMNO.

ALUMNO

Reglas para definir una entidad


CUALQUIER OBJETO SLO PUEDE SER REPRESENTADO POR UNA ENTIDAD. Es decir, las entidades son mutuamente exclusivas en todos los casos. Cada ENTIDAD debe ser identificada de forma nica. Es decir, cada instancia (aparicin) de una ENTIDAD debe encontrarse separada e identificable claramente de todas las dems instancias de ese tipo de entidad.

Conceptualmente las entidades y relaciones individuales son distintas pero, desde la ptica de las bases de datos, la diferencia debe expresarse en trminos de atributos.

Drac----21

Instalacin de SQLSERVER 2005

Para realizar tales distinciones o diferencias se debe asignar una llave primaria en cada conjunto de entidades. La llave Primaria es el conjunto de uno o ms atributos (atributos primos), que tomados colectivamente no permiten identificar de manera nica una entidad en el conjunto de entidades y una relacin en el conjunto de relaciones.
Existen dos tipos de entidades por su naturaleza:

Entidades fuertes: Son entidades que no dependen de la existencia de ninguna otra. Entidades dbiles: Son entidades que dependen de otra entidad para su existencia, es decir, que sus atributos no les permiten identificarse de manera autnoma por tanto heredan atributos primos. Entidades de referencia: Son aquellas que por su naturaleza son fuertes y ayudan a la integridad de los datos para ser referenciadas por las llaves forneas, se caracterizan por qu no se pueden modificar, insertar y borrar, si no se es el propietario de la tabla. Atributos: Describen identifica, clasifica. una entidad, la cualifica,

Representacin de los atributos:


(#) Atributo Primo. (*) Atributo obligatorio o requerido. (o) Atributo opcional o no requerido. (u) Atributo no primo con unicidad. (&) Atributo de foraneidad o de enlace. (c) Atributo con dominio de datos.

Drac----22

Instalacin de SQLSERVER 2005

Un primer ejemplo
Vamos ver un primer ejemplo, que nos ayudar a llevar a la prctica todo esto y a introducir el modelo Entidad-Relacin. Supondremos que nos proponen el siguiente problema: Se desea informatizar un centro de estudios de pequeo tamao. Interesa controlar exclusivamente los asuntos acadmicos: qu alumnos tenemos, qu cursos/asignaturas han realizado, qu profesores tenemos en plantilla, quin ha impartido cada uno de los cursos, etc. Estas seran las indicaciones que nos dara el cliente (o que nosotros pensaramos, si lo realizamos para nosotros mismos). Ahora tendramos que pensar si vemos que falta algo (y preguntar al cliente, si procede, cosas como si desea guardar la direccin y dems datos postales de los alumnos y de los profesores, o si quiere saber la nota que cada alumno obtuvo en cada curso) o incluso si sobra algo (porque resulte demasiado difcil de llevar a cabo Pasamos a desglosar en bloques de informacin. De momento todava no hablaremos de tablas, sino de entidades (un nombre ms ambiguo pero ms Adecuado) y de relaciones entre estas entidades. En nuestro caso, bsicamente stas: las cosas (entidades) que tenemos son

.Alumnos .Cursos .Profesores


Y las relaciones que hay entre estas entidades son:

.Los profesores IMPARTEN cursos. .Los alumnos ASISTEN a cursos.


(Indirectamente, los alumnos y los profesores tambin estn relacionados: un alumno ha asistido a un curso que ha impartido un cierto profesor; esta relacin ya queda reflejada a partir de las otras dos, as que no es necesario detallarla).

Aun comentaremos algo ms sobre las relaciones. Una caracterstica importante de las relaciones es su cardinalidad: por ejemplo, en la relacin de que los alumnos asisten a los cursos, es importante si a cada curso slo puede

Drac----23

Instalacin de SQLSERVER 2005

asistir un alumno o varios, y si un alumno puede asistir a un solo curso o a varios. Tendremos cuatro posibilidades: 1. Que cada alumno asista uno y solo uno de los cursos (se expresa como 1:1 -uno a uno-) 2. Que cada alumno pueda asistir a muchos cursos, pero en cada curso slo puede haber un alumno (1:M -uno a muchos-) 3. Que cada alumno pueda asistir a un nico curso, pero pueda haber varios alumnos en un curso (M:1 -muchos a uno-). 4. Que cada alumno pueda asistir a varios cursos, y en cada curso pueda haber varios alumnos (M:M -muchos a muchos-) En nuestro caso, la relacin muchos a muchos (M:M). asistir es una relacin de

Podramos preguntarnos la cardinalidad de la otra relacin (los profesores imparten cursos). En este caso, cada profesor puede impartir varios cursos, y supondremos que cada curso es impartido por un nico profesor (estoy dando por supuesto que se considera distinto un curso de Bases de Datos impartido en una fecha y otro de la misma temtica pero impartido en fecha distinta). Se tratara de una relacin de uno a muchos 1:M. Una observacin: en las relaciones es importante el sentido en el que se leen. Por ejemplo, la relacin los profesores imparten cursos es una relacin 1:M (uno a muchos), mientras que la relacin opuesta los cursos son impartidos por profesores es una relacin M:1 (muchos a uno). Estas relaciones que hemos comentado son relaciones binarias (entre dos entidades). Este es un modelo que nos permitir dibujar las entidades y las relaciones que existen entre ellas. Nosotros usaremos el modelo Entidad-Relacin Extendido (EER, de aqu en adelante). Drac----24

Instalacin de SQLSERVER 2005

En esta notacin se representan las entidades como un rectngulo y las relaciones binarias como un rombo partido por la mitad. Si la relacin es 1:M, una de las mitades (la que corresponde al muchos) deber estar sombreada, y si es M:M, todo el rombo estar sombreado.

Diagrama del Ejemplo

As de sencillo: tenemos 3 entidades

(profesores, cursos, alumnos) y dos relaciones (impartir, entre profesores y alumnos, 1:M, y asistir, entre alumnos y cursos, M:M). Realmente, ya a este nivel se suele indicar los apartados que hay en cada entidad (lo que sern los campos de nuestras tablas). A estos apartados les llamaremos atributos, y se representan como pequeas elipses que salen de las entidades. Vamos a pensar primero qu atributos nos podra interesar para nuestras entidades:
Alumnos:

.CI (Cedula de Identidad) .Nombre .Direccin .Ciudad .Telfono .Fecha de nacimiento .Fecha de alta en el centro

Drac----25

Instalacin de SQLSERVER 2005

.Fotografa
Profesores: .CI

.Nombre .Direccin .Ciudad .Telfono .Conocimientos .Sueldo .Cuenta bancaria

Cursos:
.Nombre del curso .Fecha de comienzo .Duracin (horas) .Costo (monto) .Nmero mximo de alumnos Lo que s vamos a pensar ya es cul de esos datos nos permitir distinguir una ficha de otra. Esto se hace porque podemos tener dos alumnos con el mismo nombre, pero claramente son personas distintas, y debemos saber qu cursos ha realizado cada uno de ellos sin posibilidad de confusin, para no dar a uno el diploma que corresponda a otro, ni cobrarle un dinero de otro. En el caso de los alumnos, no son datos nicos los siguientes: el nombre (puede repetirse, incluso con apellidos), la direccin (dos hermanos o dos amigos pueden vivir en la misma casa), el telfono (ocurre lo mismo), la fecha de nacimiento (tambin podemos encontrar dos alumnos que hayan nacido el mismo da), etc. Lo que realmente distinguir a un alumno de otro es su nmero de CI o pasaporte, que s es nico. Pues bien, este dato que puede distinguir una persona de otra (o en general una ficha -registro- de otra) es lo que llamaremos la clave.

Drac----26

Instalacin de SQLSERVER 2005

Puede ocurrir que no exista nada que nos sirva claramente como clave, como es el caso de los cursos: no es nico el nombre (podemos impartir ms de un curso con el mismo contenido), ni la fecha de comienzo (varios cursos pueden comenzar el mismo da), ni la duracin, ni el importe, ni el nmero mximo de alumnos. En estos casos se suele aadir algo arbitrario, un cdigo, que nos permita distinguir un curso de otro (en general una ficha -registro- de otra). En nuestro caso, incluiramos un nuevo atributo, llamado Cdigo de curso. Un ltimo comentario antes de ver cmo quedara nuestro diagrama EER con sus atributos. Puede ocurrir que nuestra entidad tenga varios atributos nicos, todos los cuales puedan servir como clave. Entonces escogemos una de ellas como clave principal, y el resto sern claves alternativas, que no llegaremos a usar como claves. En el diagrama, el atributo que vaya a utilizarse como clave principal aparecer subrayado. Ahora ya s. Nuestro diagrama quedara as (no incluyo todos los atributos que habamos pensado, slo algunos como ejemplo, que es con los que trabajaremos a partir de ahora)

Convirtiendo el diseo a tablas Mtodo general

Drac----27

Instalacin de SQLSERVER 2005

Posiblemente la mayor ventaja del conversin a tablas es casi inmediata:

modelo

EER

es

que

la

En principio, cada entidad corresponder a una tabla, y los atributos de la entidad darn lugar a los campos de la tabla. Las relaciones de uno a muchos (1:M) se reflejarn poniendo la clave del uno en la tabla de los muchos. Me explico: si un profesor imparte muchos cursos (y cada curso es impartido por un nico profesor), lo que haremos es poner el cdigo del profesor (su CI) en la ficha de cada curso que imparte. Las relaciones de muchos a muchos (M:M) aparecern como una nueva tabla, en la que cada registro estar formado por las claves de las tablas que se relacionan. En nuestro caso, la relacin de muchos a muchos entre alumnos y cursos se convertir en una nueva tabla, en la que cada registro contiene dos campos: el cdigo del curso al que se asiste y el CI del alumno que ha asistido. Las relaciones de uno a uno muchas veces son debidas a un fallo de diseo, y corresponden a datos que deberan estar en una misma tabla. Por ejemplo, si suponemos que cada persona tendr una nica direccin postal, y cada direccin corresponde a una nica persona, entonces el dato de la direccin postal deber ser uno ms de la tabla que almacena todos los datos de esa persona. Esta simplificacin que hemos hecho no es del todo cierta: a veces las relaciones 1:1 debern reflejarse como una nueva tabla.

Convirtiendo a tablas nuestro ejemplo.


As, en nuestro caso, obtendramos las siguientes tablas (con sus campos, limitndonos a los atributos que hemos incluido en el ltimo diagrama):

Alumnos:
CI (clave) Nombre

Drac----28

Instalacin de SQLSERVER 2005

Tlf

Profesores:
CI (clave) Nombre Direcc

Cursos:
Cdigo (clave) Nombre del curso Fecha de comienzo CI del profesor

Asistir:
Cdigo del curso CI del alumno

Ya slo falta una cosa. Hay que decidir los tipos de datos de los campos y tambin los tamaos de los campos. Esto es porque al ordenador habr que darle toda la informacin muy cuadriculada, para que podamos guardar toda la informacin que nos interesa pero sin desperdiciar demasiado espacio. Los tipos de datos existentes pueden variar de un sistema de bases de datos a otro, as que vamos a limitarnos (por ahora) a hacer una primera aproximacin, acercndonos al caso de nuestros campos: El nombre de un alumno, de un profesor o de un curso, estar formado bsicamente por letras. Todos los sistemas de bases de datos tendrn un tipo de datos adecuado para almacenar series de letras (que podrn incluir alguna cifra numrica o algn otro smbolo). Ser un tipo llamado Texto, Alfanumrico, Carcter o algo similar. En cuanto al tamao, nos puede bastar con unas 40 letras (insisto: no debemos quedarnos cortos, pero si nos excedemos, estaremos desperdiciando espacio).

Drac----29

Instalacin de SQLSERVER 2005

La direccin tendr tambin letras, nmeros y algn otro smbolo, de modo que tambin ser tipo Texto, y unas 50 letras de tamao puede estar bien. El CI del alumno o del profesor contendr cifras numricas, pero posiblemente tambin alguna letra, de modo que nos interesar que tambin este dato sea de tipo Texto, y entre 10 y 15 letras de tamao (dependiendo de si vamos a escribir puntos en los millares, guin antes de la letra, etc.). El telfono del alumno slo contendr cifras. Tendremos un tipo de dato Numrico, que nos puede servir en este caso y que ser imprescindible en el caso de que queramos hacer operaciones aritmticas con los datos almacenados en un campo. En el caso del telfono, no necesitamos hacer operaciones, y tambin es posible que nos interese escribir parntesis, guiones o espacio, de modo que quiz sea ms interesante dejarlo como tipo Texto, de unas 12-15 letras. Adems, es frecuente que se ignoren (no se muestran ni se guardan) los ceros a la izquierda de una expresin numrica, y esto es algo que no deberemos permitir con un telfono, que podra tener un prefijo provincial o internacional que comience por 0 (lo mismo ocurre con los cdigos postales). Para la fecha de inicio de un curso, casi todos los sistemas de bases de datos nos permitirn utilizar un tipo de datos llamado Fecha. El cdigo de un curso queda a nuestra eleccin: si queremos que est formado slo por nmeros, sera tipo de datos Numrico; si queremos que pueda contener letras u otros smbolos, debera ser de tipo Texto. Algunos sistemas de bases de datos van ms all y permiten un tipo Autonumrico, que es un dato numrico que va incrementndose automticamente (en el primer registro que introduzcamos ser un 1, en el segundo un 2, y as sucesivamente), para que no tengamos ni siquiera que pensar qu cdigo queremos para cada registro (hay gente a quien esto le parece muy cmodo y otros que lo consideran demasiado rgido).

Tipos de datos existentes.

Drac----30

Instalacin de SQLSERVER 2005

En general, los tipos de datos habituales, que encontraremos en casi cualquier sistema de bases de datos, son los siguientes: Texto (text,nchar,nvarchar,ntext), cuando nuestro campo deba almacenar letras y quizs algn otro tipo de smbolos de puntuacin y/o cifras numricas. Deberemos indicar la cantidad de letras (o en general, de caracteres) para las que queremos dejar espacio (no deberamos quedarnos cortos, para que nos quepa toda la informacin que nos interesa, pero tampoco hay que dejar mucho espacio de ms, o estaramos desperdiciando una parte de la capacidad de nuestros sistemas de almacenamiento sin necesidad). Numrico(int, Money, smallint, smallmoney, real, float, decimal), cuando nuestro campo vaya a guardar cantidades numricas, especialmente si ms adelante necesitaremos realizar operaciones aritmticas con estas cantidades numricas, si se va guardar la informacin en la base usaremos nmero entero largo o nmero real de doble precisin, etc. Fecha, para almacenar fechas (y, en ocasiones, tambin horas). Se utiliza para que las comparaciones y las ordenaciones sean correctas (por ejemplo, si escribimos las fechas 12/01/2000 y 31/10/1975 como texto, el ordenador considerara que la primera es menor -anterior- a la segunda, lo cual es claramente incorrecto).

Aqu un cuadro de tipos de datos usados en SQLSERVER 2005

Bigint datetime Money

Binario Decimal Nchar

Bit Float ntext Smallmoney

char image nvarchar text uniqueidentifier

cursor Int real timestamp

smalldatetime Smallint Tinyint

Varbinary Varchar

Drac----31

Instalacin de SQLSERVER 2005

Problemas que hemos evitado con nuestro diseo.

Cuando uno piensa directamente en tablas, puede sentirse tentado a crear una nica tabla para los cursos (o casi), que contuviera esta informacin (por ejemplo): .Nombre del curso .Duracin .Fecha de comienzo .Alumno1 .NotaAlumno1 .Alumno2 .NotaAlumno2 .Alumno3 .NotaAlumno3 .Alumno4 .NotaAlumno4 .Alumno5 .NotaAlumno5 Esto es tan grave (mucho) como frecuente (he visto errores similares en los datos manipulados por conocidos programas de contabilidad). Hemos dejado espacio para 5 alumnos en cada curso. Veamos los problemas que esto puede provocar: Si en algn desperdiciando dems. curso hay menos de 5 alumnos, estamos el espacio que habamos reservado para los

Si necesitamos que entren ms de 5 alumnos a un mismo curso, estamos desbordando lo que habamos previsto y tenemos que empezar a hacer parches (dos fichas para el mismo curso?). Si queremos buscar qu cursos ha realizado un cierto alumno, tendremos que recorrer todos los registros, mirando si su nombre aparece en los campos (atributos) alumno1, alumno2,

Drac----32

Instalacin de SQLSERVER 2005

alumno3, alumno4 o alumno5. Y se complica todava ms si en vez de una simple bsqueda queremos obtener un listado que incluya varios datos. En nuestro diagrama podemos ver que nuestra base de datos permite que un curso tenga 1 alumno, 50 alumnos o incluso ninguno, y en ningn caso estaremos desperdiciando espacio. Para buscar los alumnos que han asistido a un cierto curso o incluso para crear un listado con esta informacin, slo tendremos que recorrer la tabla Asistir. Problemas que an tiene nuestro diseo.

Hemos evitado algunos errores frecuentes, pero datos todava no es todo lo buena que debera.

nuestra

base

de

Por ejemplo, si miramos el primer estudio que hemos hecho de los atributos que nos interesara almacenar, vemos que entre un alumno y un profesor hay muchos datos en comn: ambos tienen un nombre, un DNI, una direccin, un telfono, una ciudad Y de hecho, si uno de nuestros profesores fuese a su vez alumno de otro curso, tendramos sus datos por duplicado, con todos los problemas y riesgos que esto conlleva (problemas de espacio desperdiciado y riesgos de que si cambia alguno de sus datos no nos acordemos de cambiarlo en todas las tablas en las que aparece, y esto dara lugar a inconsistencias en nuestros datos). Esto se debe a que no hemos profundizado todo lo que deberamos. En realidad, tanto alumnos como profesores son personas. Esto es lo que se conocen como una generalizacin, y se suele resolver creando una tabla que contendra todos los datos que son comunes a las personas, y conservando en las tablas de alumnos y de profesores slo los datos que realmente son exclusivos de cada uno de ellos (adems del CI, que nos permitira enlazar los datos que un alumno tiene por ser alumno con los que tiene por ser persona).

Normalizacin de Bases de Datos


Se explican los conceptos de la normalizacin de bases de datos, mismos que son necesarios para un buen diseo de una base de datos.

Normalizacin de Bases de Datos

Drac----33

Instalacin de SQLSERVER 2005

Qu es la normalizacin?

La normalizacin es el proceso mediante el cual se transforman datos complejos a un conjunto de estructuras de datos ms pequeas, que adems de ser ms simples y ms estables, son ms fciles de mantener. Tambin se puede entender la normalizacin como una serie de reglas que sirven para ayudar a los diseadores de bases de datos a desarrollar un esquema que minimice los problemas de lgica. Cada regla est basada en la que le antecede. La normalizacin se adopt porque el viejo estilo de poner todos los datos en un solo lugar, como un archivo o una tabla de la base de datos, era ineficiente y conduca a errores de lgica cuando se trataban de manipular los datos. La normalizacin tambin hace las cosas fciles de entender. Los seres humanos tenemos la tendencia de simplificar las cosas al mximo. Lo hacemos con casi todo, desde los animales hasta con los automviles. Vemos una imagen de gran tamao y la hacemos ms simple agrupando cosas similares juntas. Las guas que la normalizacin provee crean el marco de referencia para simplificar una estructura de datos compleja. Otra ventaja de la normalizacin de base de datos es el consumo de espacio. Una base de datos normalizada ocupa menos espacio en disco que una no normalizada. Hay menos repeticin de datos, lo que tiene como consecuencia un mucho menor uso de espacio en disco. El proceso de normalizacin reglas para cada fase. Esto principio, pero poco a poco como las razones para hacerlo tiene un nombre y una serie de puede parecer un poco confuso al se va entendiendo el proceso, as de esta manera.

Grados de normalizacin
Existen bsicamente tres niveles de normalizacin: Primera Forma Normal (1NF), Segunda Forma Normal (2NF) y Tercera Forma Normal (3NF). Cada una de estas formas tiene sus propias reglas. Cuando una base de datos se conforma a un nivel, se considera normalizada a esa forma de normalizacin. No siempre es una

Drac----34

Instalacin de SQLSERVER 2005

buena idea tener una base de datos conformada en el nivel ms alto de normalizacin, puede llevar a un nivel de complejidad que pudiera ser evitado si estuviera en un nivel ms bajo de normalizacin. En la tabla siguiente se describe brevemente en qu consiste cada una de las reglas, y posteriormente se explican con ms detalle.

Regla
Primera Forma Normal (1FN) Segunda Forma Normal (2FN) Tercera Forma Normal (3FN)

Descripcin
Incluye la eliminacin de todos los grupos repetidos Asegura que todas las columnas que no son llave sean completamente dependientes de la llave primaria (PK) Elimina cualquier dependencia transitiva. Una dependencia transitiva es aquella en la cual las columnas que no son llave son dependientes de otras columnas que tampoco son llave.

Primera Forma Normal


La regla de la Primera Forma Normal establece que las columnas repetidas deben eliminarse y colocarse en tablas separadas. Poner la base de datos en la Primera Forma Normal resuelve el problema de los encabezados de columna mltiples. Muy a menudo, los diseadores de bases de datos inexpertos harn algo similar a la tabla no normalizada. Una y otra vez, crearn columnas que representen los mismos datos. La normalizacin ayuda a clarificar la base de datos y a organizarla en partes ms pequeas y ms fciles de entender. En lugar de tener que entender una tabla gigantesca y monoltica que tiene muchos diferentes aspectos, slo tenemos que entender los objetos pequeos y ms tangibles, as como las relaciones que guardan con otros objetos tambin pequeos.

Segunda Forma Normal


La regla de la Segunda Forma Normal establece que todas las dependencias parciales se deben eliminar y separar dentro de sus Drac----35

Instalacin de SQLSERVER 2005

propias tablas. Una dependencia parcial es un trmino que describe a aquellos datos que no dependen de la llave primaria de la tabla para identificarlos. Una vez alcanzado el nivel de la Segunda Forma Normal, se controlan la mayora de los problemas de lgica. Podemos insertar un registro sin un exceso de datos en la mayora de las tablas.

Tercera Forma Normal


Una tabla est normalizada en esta forma si todas las columnas que no son llave son funcionalmente dependientes por completo de la llave primaria y no hay dependencias transitivas. Comentamos anteriormente que una dependencia transitiva es aquella en la cual existen columnas que no son llave que dependen de otras columnas que tampoco son llave.

Cuando las tablas estn en la Tercera Forma Normal se previenen errores de lgica cuando se insertan o borran registros. Cada columna en una tabla est identificada de manera nica por la llave primaria, y no debe haber datos repetidos. Esto provee un esquema limpio y elegante, que es fcil de trabajar y expandir. Un dato sin normalizar no cumple con ninguna regla de normalizacin. Para explicar con un ejemplo en qu consiste cada una de las reglas, vamos a considerar los datos de la siguiente tabla.

Al examinar estos registros, podemos darnos grupo repetido para NUM_ITEM, DESC_ITEM, prohbe los grupos repetidos, por lo tanto la primera forma normal. Los pasos a seguir

cuenta que contienen un CANT y PRECIO. La 1FN tenemos que convertir a son:

Tenemos que eliminar los grupos repetidos.

Drac----36

Instalacin de SQLSERVER 2005

Tenemos que crear una nueva tabla con la PK de la tabla base y el grupo repetido.

Los registros quedan ahora conformados en dos tablas que llamamos ORDENES y ARTICULOS_ORDENES ORDENES

ARTICULOS_ORDENES

Ahora procederemos a aplicar la segunda formal normal, es decir, tenemos que eliminar cualquier columna no llave que no dependa de la llave primaria de la tabla. Los pasos a seguir son: Determinar cules columnas que no son dependen de la llave primaria de la tabla. Eliminar esas columnas de la tabla base. Crear una segunda tabla con esas columnas y la(s) columna(s) de la PK de la cual dependen. llave no

La tabla ORDENES est en 2FN. Cualquier valor nico de ID_ORDEN determina un slo valor para cada columna. Por lo tanto, todas las columnas son dependientes de la llave primaria ID_ORDEN.

Por su parte, la tabla ARTICULOS_ORDENES que las columnas PRECIO y DESC_ITEM son pero no son dependientes de ID_ORDEN. Lo es eliminar estas columnas de la tabla una tabla ARTICULOS con dichas columnas que dependen.

no se encuentra en 2FN ya dependientes de NUM_ITEM, que haremos a continuacin ARTICULOS_ORDENES y crear y la llave primaria de la

Las tablas quedan ahora de la siguiente manera. ARTICULOS_ORDENES

Drac----37

Instalacin de SQLSERVER 2005

ARTICULOS

La tercera forma normal nos dice que tenemos que eliminar cualquier columna no llave que sea dependiente de otra columna no llave. Los pasos a seguir son: Determinar las columnas que son dependientes de otra columna no llave. Eliminar esas columnas de la tabla base. Crear una segunda tabla con esas columnas y con la columna no llave de la cual son dependientes.

Al observar las tablas que hemos creado, nos damos cuenta que tanto la tabla ARTICULOS, como la tabla ARTICULOS_ORDENES se encuentran en 3FN. Sin embargo la tabla ORDENES no lo est, ya que NOM_CLIENTE y ESTADO son dependientes de ID_CLIENTE, y esta columna no es la llave primaria. Para normalizar esta tabla, moveremos las columnas no llave y la columna llave de la cual dependen dentro de una nueva tabla CLIENTES. Las nuevas tablas CLIENTES y ORDENES se muestran a continuacin. ORDENES

CLIENTES

Drac----38

Instalacin de SQLSERVER 2005

Qu tan lejos debe llevar la normalizacin?


La siguiente decisin es qu tan lejos debe llevar la normalizacin? La normalizacin es una ciencia subjetiva. Determinar las necesidades de simplificacin depende de nosotros. Si nuestra base de datos va a proveer informacin a un solo usuario para un propsito simple y existen pocas posibilidades de expansin, normalizar los datos hasta la 3FN quiz sea algo exagerado. Las reglas de normalizacin existen como guas para crear tablas que sean fciles de manejar, as como flexibles y eficientes. A veces puede ocurrir que normalizar los datos hasta el nivel ms alto no tenga sentido. Se estn dividiendo tablas slo para seguir las reglas o estas divisiones son en verdad prcticas?. stas son el tipo de cosas que nosotros como diseadores de la base de datos, necesitamos decidir, y la experiencia y el sentido comn nos pueden auxiliar para tomar la decisin correcta. La normalizacin no es una ciencia exacta, ms bien subjetiva. Existen seis niveles ms de normalizacin que no se han discutido aqu. Ellos son Forma Normal Boyce-Codd, Cuarta Forma Normal (4NF), Quinta Forma Normal (5NF) o Forma Normal de Proyeccin-Unin, Forma Normal de Proyeccin-Unin Fuerte, Forma Normal de Proyeccin-Unin Extra Fuerte y Forma Normal de Clave de Dominio. Estas formas de normalizacin pueden llevar las cosas ms all de lo que necesitamos. stas existen para hacer una base de datos realmente relacional. Tienen que ver principalmente con dependencias mltiples y claves relacionales.

En resumen

La normalizacin es una tcnica que se utiliza para crear relaciones lgicas apropiadas entre tablas de una base de datos. Ayuda a prevenir errores lgicos en la manipulacin de datos. La normalizacin facilita tambin agregar nuevas columnas sin romper el esquema actual ni las relaciones. Existen varios niveles de normalizacin: Primera Forma Normal, Segunda Forma Normal, Tercera Forma Normal, Forma Normal BoyceCodd, Cuarta Forma Normal, Quinta Forma Normal o Forma Normal de Proyeccin-Unin, Forma Normal de Proyeccin-Unin Fuerte, Forma

Drac----39

Instalacin de SQLSERVER 2005

Normal de Proyeccin-Unin Extra Fuerte y Forma Normal de Clave de Dominio. Cada nuevo nivel o forma nos acerca ms a hacer una base de datos verdaderamente relacional. Se discutieron las primeras tres formas. stas proveen suficiente nivel de normalizacin para cumplir con las necesidades de la mayora de las bases de datos. Normalizar demasiado puede conducir a tener una base de datos ineficiente y hacer a su esquema demasiado complejo para trabajar. Un balance apropiado de sentido comn y prctico puede ayudarnos a decidir cundo normalizar.

Drac----40

Instalacin de SQLSERVER 2005

GUIA DEL SQLSERVER 2005


Selecciona la opcin donde se puede ejecutar el SQLSERVER 2005, puede encontrarlo como indica la figura:

Y doble clic a la opcin SQL Server Management Studio Express, luego de ello aparecern las siguientes pantallas.

Para este caso aparecer la siguiente pantalla, de acuerdo a la configuracin que se diera en la instalacin. Y procedemos a conectarnos a la base local indicada anteriormente.

Drac----41

Instalacin de SQLSERVER 2005

Esta es la pantalla que le aparecer y es la principal.

En esta gua no s explicar los estndares de opciones de Fila, Edit., etc., nos concentraremos en la seccin de Object Explorer.

Una que se abra todas las opciones aparecer desplagado de la siguiente manera:

Drac----42

Instalacin de SQLSERVER 2005

Databases.- Donde se alojaran todas las bases de datos creadas o las del sistema. Security. Carpeta donde estarn los permisos y usuarios para el acceso al servidor, o las bases. Server Object. Esta opcin nos permitir respaldar las bases de datos creadas y tambin poder restaurarlas. Replication. Esta opcin nos permitir replicar la informacin de la base y un sistema ingresado de bases de datos. Management. Esta opcin nos permitir revisar los log de los servidores y monitorear las bases. New Query. Esta nos permite que se despliegue la venta donde se ejecutar las sentencias o ordenes a la base de datos, tambin se podrn ejecutar los escript.
Drac----43

Instalacin de SQLSERVER 2005

Saldr la siguiente pantalla:

A continuacin se indica algunas de las opciones del editor, que nos permitir trabajar sobre los objetos de la base, realizando cualquier tipo de trabajo de acuerdo a sus necesidades.

Connect: Nos permite conectarnos a algn servidor requerido Disconnect: Permite la desconexin al servidor. Available Databases: Indica la base de datos en uso

Drac----44

Instalacin de SQLSERVER 2005

Execute:Ejecutar cualquier lnea que se encuentra en el editor o sombreada, esto refirindonos a las sentencias TRANSACT SQL.

Drac----45

Instalacin de SQLSERVER 2005

TRANSACT SQL DEL SQL SERVER 2005 Ejemplos y Sintaxis

Es el lenguaje SQL que emplea SQL Server 2005, cuando se ejecuta una instruccin SQL simple se est empleando Transact, se puede forzar a que utilice el estndar SQL-92, que realmente es lo mismo pero con menor funcionalidad.

USE
Cambia el contexto de la base de datos al de la base de datos especificada.
Sintaxis

USE {baseDatos}

GO
Indica a las herramientas de Microsoft SQL Server el final de un lote de instrucciones Transact-SQL. Permite ejecutar varias instrucciones por separado una a continuacin de la otra.
Sintaxis

GO
Ejemplo: USE pubs GO DECLARE @NmbrAuthors int

Drac----46

Instalacin de SQLSERVER 2005

SELECT @NmbrAuthors = COUNT(*) FROM authors PRINT 'The number of authors as of ' + CAST(GETDATE() AS char(20)) + ' is ' + CAST(@NmbrAuthors AS char (10)) GO

PRINT
Devuelve al cliente un mensaje definido por el usuario. Observaciones Para imprimir un mensaje de error definido por el usuario cuando se tiene el nmero de error que se puede obtener con @@ERROR, utilice RAISERROR en lugar de PRINT. Ejemplos Impresin ejecutada condicionalmente (IF EXISTS)

Este ejemplo utiliza la instruccin PRINT para devolver un mensaje condicionalmente.


IF EXISTS (SELECT zip FROM authors WHERE zip = '94705') PRINT 'Berkeley author' Crear y mostrar una cadena Este ejemplo convierte el resultado de la funcin GETDATE al tipo de datos varchar y le concatena texto literal que devuelve PRINT. PRINT 'This message was printed on ' + RTRIM(CONVERT(varchar(30), GETDATE())) + '.'

EXECUTE - EXEC
Ejecuta una funcin definida por el usuario y que devuelve valores escalares, un procedimiento del sistema, un procedimiento almacenado definido por el usuario o un procedimiento almacenado extendido. Admite tambin la ejecucin de una cadena de caracteres en un proceso por lotes Transact-SQL. Para llamar a una funcin, utilice la sintaxis que se describe para EXECUTE stored_procedure.

Drac----47

Instalacin de SQLSERVER 2005

Utilizar EXECUTE con una variable de procedimiento almacenado El ejemplo siguiente crea una variable que representa un nombre de procedimiento almacenado. DECLARE @proc_name varchar(30) SET @proc_name = 'sp_who' EXEC @proc_name

El procedimiento almacenado proc_calculate_taxes se puede ejecutar con muchas combinaciones: EXECUTE EXECUTE EXECUTE EXECUTE proc_calculate_taxes proc_calculate_taxes proc_calculate_taxes proc_calculate_taxes @p2 69, 69, @p1 = 'A' 'B' 'C', 'House' = DEFAULT, @p2 = 'D'

IDENTIFICADORES TRANSACT-SQL
@ = variable global # = objeto temporal local

## = objeto temporal global

DECLARE @local_variable
Las variables se declaran en el cuerpo de un proceso por lotes o procedimiento con la instruccin DECLARE, y se les asignan valores con una instruccin SET o SELECT. Las variables de cursor pueden declararse con esta instruccin y utilizarse con otras instrucciones relacionadas con los cursores. Despus de su declaracin, todas las variables se inicializan con NULL (nulo).

A. Utilizar DECLARE
Este ejemplo utiliza una variable local denominada @find para recuperar informacin de todos los autores cuyos apellidos comienzan con Ring. USE pubs DECLARE @find varchar(30) SET @find = 'Ring%'

Drac----48

Instalacin de SQLSERVER 2005

SELECT au_lname, au_fname, phone FROM authors WHERE au_lname LIKE @find El siguiente es el conjunto de resultados:
au_lname ------------------------------------------------Ringer 0752 Ringer 0752 (2 row(s) affected) au_fname phone -------------------Anne Albert 801 826801 826-

B. Utilizar DECLARE con dos variables Este ejemplo recupera nombres de empleados de los empleados de Binnet & Hardley (pub_id = 0877) contratados el 1 de enero de 1993 o posteriormente.
USE pubs SET NOCOUNT ON GO DECLARE @pub_id char(4), @hire_date datetime SET @pub_id = '0877' SET @hire_date = '1/01/93' -- Here is the SELECT statement syntax to assign values to two local -- variables. -- SELECT @pub_id = '0877', @hire_date = '1/01/93' SET NOCOUNT OFF SELECT fname, lname FROM employee WHERE pub_id = @pub_id and hire_date >= @hire_date

El siguiente es el conjunto de resultados:


fname -------------------Anabela Paul (2 row(s) affected) lname -----------------------------Domingues Henriot

Drac----49

Instalacin de SQLSERVER 2005

TRIGGERS
A. Utilizar un desencadenador con un mensaje de aviso El siguiente desencadenador de ejemplo imprime un mensaje en el cliente cuando alguien intenta agregar o cambiar datos en la tabla titles.

Nota El mensaje 50009 es un mensaje definido por el usuario en sysmessages. Para obtener ms informacin acerca de la creacin de mensajes definidos por el usuario, consulte sp_addmessage.
USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminder GO CREATE TRIGGER reminder ON titles FOR INSERT, UPDATE AS RAISERROR (50009, 16, 10) GO
F. Utilizar COLUMNS_UPDATED para probar ms de 8 columnas

Si tiene que probar actualizaciones que afectan a otras columnas que no sean las 8 primeras de una tabla, debe utilizar la funcin SUBSTRING para probar si COLUMNS_UPDATED devuelve el bit correcto. Este ejemplo prueba las actualizaciones que afectan a las columnas 3, 5 o 9 de la tabla Northwind.dbo.Customers.
USE Northwind DROP TRIGGER tr1 GO CREATE TRIGGER tr1 ON Customers FOR UPDATE AS IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(3-1)) + power(2,(5-1))) AND (SUBSTRING(COLUMNS_UPDATED(),2,1)=power(2,(1-1))) ) PRINT 'Columns 3, 5 and 9 updated' GO UPDATE Customers

Drac----50

Instalacin de SQLSERVER 2005

GO

SET ContactName=ContactName, Address=Address, Country=Country

CREATE FUNCTION
A. Funcin de valores escalares definida por el usuario que calcula la semana ISO En este ejemplo, una funcin definida por el usuario, ISOweek, toma un argumento de fecha y calcula el nmero de semana ISO. Para que esta funcin realice el clculo correctamente, se debe llamar a SET DATEFIRST 1 antes de llamar a la funcin.
CREATE FUNCTION ISOweek (@DATE datetime) RETURNS int AS BEGIN DECLARE @ISOweek int SET @ISOweek= DATEPART(wk,@DATE)+1 -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') --Special cases: Jan 1-3 may belong to the previous year IF (@ISOweek=0) SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 --Special case: Dec 29-31 may belong to the next year IF ((DATEPART(mm,@DATE)=12) AND ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) SET @ISOweek=1 RETURN(@ISOweek) END

sta es la llamada a la funcin. Observe que el valor de DATEFIRST es 1.


SET DATEFIRST 1 SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'

ste es el conjunto de resultados:


ISO Week ---------------52

Drac----51

Instalacin de SQLSERVER 2005

CREATE PROCEDURE
Procedimientos almacenados temporales

De forma similar a las tablas temporales, los procedimientos almacenados temporales, tanto privados como globales, se pueden crear agregando los prefijos # y ## delante del nombre del procedimiento. # denota un procedimiento almacenado temporal local; ## denota un procedimiento almacenado temporal global. Estos procedimientos dejan de existir cuando se cierra SQL Server. A. Utilizar un procedimiento sencillo con una instruccin SELECT compleja Este procedimiento almacenado devuelve todos los autores (nombre y apellidos), los ttulos y los publicadores a partir de una combinacin de cuatro tablas. Este procedimiento almacenado no utiliza ningn parmetro.
USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info_all' AND type = 'P') DROP PROCEDURE au_info_all GO CREATE PROCEDURE au_info_all AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id GO

El procedimiento almacenado au_info_all se puede ejecutar de estas formas:


EXECUTE au_info_all -- Or EXEC au_info_all

Drac----52

Instalacin de SQLSERVER 2005

O si este procedimiento es la primera instruccin del proceso por lotes:


au_info_all

B. Utilizar un procedimiento sencillo con parmetros Este procedimiento almacenado devuelve slo los autores especificados (nombre y apellidos), los ttulos y los publicadores a partir de una combinacin de cuatro tablas. Este procedimiento almacenado acepta coincidencias exactas de los parmetros pasados.
USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info' AND type = 'P') DROP PROCEDURE au_info GO USE pubs GO CREATE PROCEDURE au_info @lastname varchar(40), @firstname varchar(20) AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname = @firstname AND au_lname = @lastname GO

El procedimiento almacenado au_info se puede ejecutar de estas formas:


EXECUTE au_info 'Dull', 'Ann' -- Or EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann' -- Or EXECUTE au_info @firstname = 'Ann', @lastname = 'Dull' -- Or EXEC au_info 'Dull', 'Ann' -- Or EXEC au_info @lastname = 'Dull', @firstname = 'Ann' -- Or EXEC au_info @firstname = 'Ann', @lastname = 'Dull'

Drac----53

Instalacin de SQLSERVER 2005

O si este procedimiento es la primera instruccin del proceso por lotes:


au_info 'Dull', 'Ann' -- Or au_info @lastname = 'Dull', @firstname = 'Ann' -- Or au_info @firstname = 'Ann', @lastname = 'Dull'

LIKE
Carcter comodn % Descripcin Ejemplo

Cualquier cadena de cero WHERE title LIKE '%computer%' o ms caracteres. busca todos los ttulos de libros que contengan la palabra 'computer' en cualquier parte del ttulo. Cualquier carcter individual WHERE au_fname LIKE '_ean' busca todos los nombres de cuatro letras que finalicen con ean (Dean, Sean, etc.). WHERE au_lname LIKE '[CP]arsen' busca apellidos de autores que terminen con arsen y comiencen con cualquier carcter individual entre C y P, por ejemplo Carsen, Larsen, Karsen, etc. WHERE au_lname LIKE 'de[^l]%' busca todos los apellidos de autores que comienzan con de y en los que la siguiente letra no sea l.

_ (subrayado)

[]

Cualquier carcter individual de intervalo ([af]) o del conjunto ([abcdef]) especificado.

[^]

Cualquier carcter individual que no se encuentre en el intervalo ([^a-f]) o el conjunto ([^abcdef]) especificado.

Drac----54

Instalacin de SQLSERVER 2005

Utilizar caracteres comodn como literales Los caracteres comodn de concordancia de patrn se pueden utilizar como literales. Para utilizar como literal un carcter comodn, inclyalo entre corchetes. La tabla muestra varios ejemplos del uso de la palabra clave LIKE y los caracteres comodn [ ]. Smbolo LIKE '5[%]' LIKE '[_]n' LIKE '[a-cdf]' LIKE '[-acdf]' LIKE '[ [ ]' LIKE ']' LIKE 'abc[_]d%' LIKE 'abc[def]' 5% _n a, b, c, d o f -, a, c, d o f [ ] abc_d y abc_de abcd, abce y abcf Significado

JOIN
Esta consulta de Transact-SQL es un ejemplo de una combinacin interna:
USE pubs SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city = p.city ORDER BY a.au_lname DESC

Drac----55

Instalacin de SQLSERVER 2005

LEFT OUTER JOIN o LEFT JOIN RIGHT OUTER JOIN o RIGHT JOIN FULL OUTER JOIN o FULL JOIN

USE pubs SELECT a.au_fname, a.au_lname, p.pub_name FROM authors a LEFT OUTER JOIN publishers p ON a.city = p.city ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

REALIZA EL PRODUCTO CARTESIANO DE LAS TABLAS

USE pubs SELECT au_fname, au_lname, pub_name FROM authors CROSS JOIN publishers ORDER BY au_lname DESC

SET NOCOUNT
Hace que deje de devolverse como parte de los resultados el mensaje que indica el nmero de filas afectado por una instruccin Transact-SQL.
Sintaxis

SET NOCOUNT { ON | OFF }

SET NOEXEC
Compila cada consulta, pero no la ejecuta. Sintaxis
Drac----56

Instalacin de SQLSERVER 2005

SET NOEXEC { ON | OFF }

SELECT
SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ] Se puede utilizar el operador UNION entre consultas para combinar sus resultados en un solo conjunto de resultados. Sintaxis SELECT statement ::= < query_expression > [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [,...n] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ] [ BY expression [ ,...n ] ] ] [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } [ , XMLDATA ] [ , ELEMENTS ] [ , BINARY base64 ] } ] [ OPTION ( < query_hint > [ ,...n ]) ] < query expression > ::= { < query specification > | ( < query expression > ) } [ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ] < query specification > ::= SELECT [ ALL | DISTINCT ] [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ] < select_list >

Drac----57

Instalacin de SQLSERVER 2005

[ INTO new_table ] [ FROM { < table_source > } [ ,...n ] ] [ WHERE < search_condition > ] [ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ] ] [ HAVING < search_condition > ] Clusula COMPUTE Genera totales que aparecen como columnas de adicionales al final del conjunto de resultados. XML Especifica que el resultado de una consulta se devolver como un documento XML. CUBE Especifica que, adems de las filas que normalmente proporciona GROUP BY, deben incluirse filas de resumen en el conjunto de resultados. Se devuelve una fila de resumen GROUP BY por cada posible combinacin de grupo y subgrupo del conjunto de resultados. ROLLUP Especifica que, adems de las filas que normalmente proporciona GROUP BY, deben incluirse filas de resumen en el conjunto de resultados. Los grupos se resumen en un orden jerrquico, desde el nivel inferior del grupo al superior. La jerarqua del grupo se determina mediante el orden en que se especifican las columnas de agrupamiento. Importante Cube y RollUp No es posible utilizar agregados diferentes, por ejemplo AVG(DISTINCT column_name), COUNT(DISTINCT column_name) y SUM(DISTINCT column_name) cuando se utiliza CUBE o ROLLUP resumen

DELETE

Drac----58

Instalacin de SQLSERVER 2005

Ejemplos A. Utilizar DELETE sin parmetros Este ejemplo elimina todas las filas de la tabla authors.
USE pubs DELETE authors

B. Utilizar DELETE en un conjunto de filas Debido a que au_lname puede no ser nico, este ejemplo elimina todas las filas en que au_lname es McBadden.
USE pubs DELETE FROM authors WHERE au_lname = 'McBadden'

C. Utilizar DELETE en la fila actual de un cursor Este ejemplo muestra una eliminacin realizada contra un cursor denominado complex_join_cursor. Slo afecta a la nica fila que se recupera actualmente del cursor.
USE pubs DELETE FROM authors WHERE CURRENT OF complex_join_cursor

INSERT
CREATE TABLE T1 ( column_1 int, column_2 varchar(30)) INSERT T1 (column_2, column_1) VALUES ('Row #1',1)

CREATE RULE
Crea un objeto denominado regla. Cuando se enlaza una regla a una columna o un tipo de datos definido por el usuario, la regla especifica los valores aceptables que se pueden insertar en esa columna. Una columna puede tener una regla y una o ms restricciones CHECK asociadas a ella. Cuando esto es as, se evalan todas las restricciones.

Drac----59

Instalacin de SQLSERVER 2005

A. Regla con un intervalo - restringe el intervalo de enteros


CREATE RULE range_rule AS @range >= $1000 AND @range < $20000

B. Regla con una lista


CREATE RULE list_rule AS @list IN ('1389', '0736', '0877')

C. Regla con un patrn


CREATE RULE pattern_rule AS @value LIKE '_ _-%[0-9]'

CREATE VIEW
Crea una tabla virtual que representa los datos de una o ms tablas de una forma alternativa. CREATE VIEW debe ser la primera instruccin en una secuencia de consultas.
--create the view that combines all supplier tables CREATE VIEW all_supplier_view AS SELECT * FROM SUPPLY1 UNION ALL SELECT * FROM SUPPLY2 UNION ALL SELECT * FROM SUPPLY3 UNION ALL SELECT * FROM SUPPLY4

D. Utilizar funciones integradas en una vista


USE pubs

Drac----60

Instalacin de SQLSERVER 2005

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'categories') DROP VIEW categories GO CREATE VIEW categories (category, average_price) AS SELECT type, AVG(price) FROM titles GROUP BY type GO

CREATE TABLE
CREATE TABLE T1 ( column_1 int identity, column_2 varchar(30) CONSTRAINT default_name DEFAULT ('column default'), column_3 int NULL, column_4 varchar(40) ) INSERT INTO T1 (column_4) VALUES ('Explicit value') INSERT INTO T1 (column_2,column_4) VALUES ('Explicit value', 'Explicit value') INSERT INTO T1 (column_2,column_3,column_4) VALUES ('Explicit value',-44,'Explicit value') SELECT * FROM T1

UPDATE
UPDATE Northwind.dbo.Products SET UnitPrice = UnitPrice * 1.1 WHERE CategoryID = 2

UPDATE CON UN CURSOR


USE Northwind GO DECLARE abc CURSOR FOR SELECT CompanyName

Drac----61

Instalacin de SQLSERVER 2005

FROM Shippers OPEN abc GO FETCH NEXT FROM abc GO UPDATE Shippers SET CompanyName = N'Speedy Express, Inc.' WHERE CURRENT OF abc GO CLOSE abc DEALLOCATE abc GO

@@FETCH_STATUS
Devuelve el estado de la ltima instruccin FETCH de cursor ejecutada sobre cualquier cursor que la conexin haya abierto. Valor de retorno 0 Descripcin

La instruccin FETCH se ejecut correctamente. La instruccin FETCH ha finalizado con error o la fila estaba ms all del conjunto de resultados. Falta la fila recuperada.

-1

-2

Sintaxis

@@FETCH_STATUS

Drac----62

Instalacin de SQLSERVER 2005

@@ERROR
Devuelve el nmero de Transact-SQL ejecutada.
Sintaxis

error

de

la

ltima

instruccin

@@ERROR
Tipos devueltos

integer A. Utilizar @@ERROR para detectar un error especfico


USE pubs GO UPDATE authors SET au_id = '172 32 1176' WHERE au_id = "172-32-1176" IF @@ERROR = 547 print "A check constraint violation occurred"

B. Utilizar @@ERROR procedimiento

para

salir

condicionalmente

de

un

-- Test the error value. IF @@ERROR <> 0 BEGIN -- Return 99 to the calling program to indicate failure. PRINT "An error occurred loading the new author information" RETURN(99) END ELSE BEGIN -- Return 0 to the calling program to indicate success. PRINT "The new author information has been loaded" RETURN(0) END

C.

Utilizar @@ERROR para instrucciones

comprobar

el

xito

de

varias

Drac----63

Instalacin de SQLSERVER 2005

Este ejemplo depende de la ejecucin con xito de las instrucciones INSERT y DELETE. Se establece el valor de @@ERROR en variables locales despus de ambas instrucciones y se utilizan las variables en una rutina de tratamiento de errores comn para la operacin.
USE pubs GO DECLARE @del_error int, @ins_error int -- Start a transaction. BEGIN TRAN -- Execute the DELETE statement. DELETE authors WHERE au_id = '409-56-7088' -- Set a variable to the error value for -- the DELETE statement. SELECT @del_error = @@ERROR -- Execute the INSERT statement. INSERT authors VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932', '6223 Bateman St.', 'Berkeley', 'CA', '94705', 1) -- Set a variable to the error value for -- the INSERT statement. SELECT @ins_error = @@ERROR -- Test the error values. IF @del_error = 0 AND @ins_error = 0 BEGIN -- Success. Commit the transaction. PRINT "The author information has been replaced" COMMIT TRAN END ELSE BEGIN -- An error occurred. Indicate which operation(s) failed -- and roll back the transaction. IF @del_error <> 0 PRINT "An error occurred during execution of the DELETE statement." IF @ins_error <> 0 PRINT "An error occurred during execution of the INSERT statement." ROLLBACK TRAN END GO

Drac----64

Instalacin de SQLSERVER 2005

@@ROWCOUNT
Devuelve el nmero de filas afectadas por la ltima instruccin.
Sintaxis

@@ROWCOUNT Tipos devueltos integer detectar si se ha modificado alguna fila


UPDATE authors SET au_lname = 'Jones' WHERE au_id = '999-888-7777' IF @@ROWCOUNT = 0 print 'Warning: No rows were updated'

TRANSACCIONES
Ejemplos

En este ejemplo se modifica el reparto de derechos de autor entre los dos autores de The Gourmet Microwave. Debido a que el estado de la base de datos sera incoherente entre dos actualizaciones, stas se deben agrupar en una transaccin definida por el usuario.

BEGIN TRANSACTION royaltychange UPDATE titleauthor SET royaltyper = 65 FROM titleauthor, titles WHERE royaltyper = 75 AND titleauthor.title_id AND title = 'The Gourmet UPDATE titleauthor SET royaltyper = 35 FROM titleauthor, titles WHERE royaltyper = 25 AND titleauthor.title_id AND title = 'The Gourmet SAVE TRANSACTION percentchanged /*

= titles.title_id Microwave'

= titles.title_id Microwave'

Drac----65

Instalacin de SQLSERVER 2005

After having updated the royaltyper entries for the two authors, the user inserts the savepoint percentchanged, and then determines how a 10-percent increase in the book's price would affect the authors' royalty earnings. */ UPDATE titles SET price = price * 1.1 WHERE title = 'The Gourmet Microwave' SELECT (price * royalty * ytd_sales) * royaltyper FROM titles, titleauthor WHERE title = 'The Gourmet Microwave' AND titles.title_id = titleauthor.title_id /* The transaction is rolled back to the savepoint with the ROLLBACK TRANSACTION statement. */ ROLLBACK TRANSACTION percentchanged COMMIT TRANSACTION /* End of royaltychange. */

DECLARE CURSOR
Define los atributos de un cursor de servidor Transact-SQL, como su comportamiento de desplazamiento y la consulta utilizada para generar el conjunto de resultados sobre el que opera el cursor. DECLARE CURSOR acepta la sintaxis basada en el estndar SQL-92 y la sintaxis de un conjunto de extensiones de Transact-SQL. Sintaxis extendida de Transact-SQL DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement [ FOR UPDATE [ OF column_name [ ,...n ] ] ] STATIC

Drac----66

Instalacin de SQLSERVER 2005

Define un cursor que hace una copia temporal de los datos que utiliza. Todas las peticiones al cursor se responden desde esta tabla temporal de tempdb; por ello, las modificaciones realizadas en las tablas base no se reflejarn en los datos obtenidos en las recuperaciones realizadas en el cursor y adems este cursor no admite modificaciones.
Observaciones

DECLARE CURSOR define los atributos de un cursor de servidor Transact-SQL, como su comportamiento de desplazamiento y la consulta utilizada para generar el conjunto de resultados en que opera el cursor. La instruccin OPEN llena el conjunto de resultados y la instruccin FETCH devuelve una fila del conjunto de resultados. La instruccin CLOSE libera el conjunto de resultados actual asociado con el cursor. La instruccin DEALLOCATE libera los recursos que utiliza el cursor.

A. Utilizar cursores simples y su sintaxis El conjunto de resultados generado al abrir este cursor contiene todas las filas y todas las columnas de la tabla authors de la base de datos pubs. Este cursor se puede actualizar, y todas las actualizaciones y eliminaciones se representan en las recuperaciones realizadas contra el cursor. FETCH NEXT es la nica recuperacin disponible debido a que no se ha especificado la opcin SCROLL.
DECLARE authors_cursor CURSOR FOR SELECT * FROM authors OPEN authors_cursor FETCH NEXT FROM authors_cursor

B. Utilizar cursores anidados para elaborar resultados de informes Este ejemplo muestra cmo se pueden anidar los cursores para elaborar informes complejos. El cursor interno se declara para cada autor.
SET NOCOUNT ON

Drac----67

Instalacin de SQLSERVER 2005

DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40), @message varchar(80), @title varchar(80) PRINT "-------- Utah Authors report --------" DECLARE authors_cursor CURSOR FOR SELECT au_id, au_fname, au_lname FROM authors WHERE state = "UT" ORDER BY au_id OPEN authors_cursor FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lname WHILE @@FETCH_STATUS = 0 BEGIN PRINT " " SELECT @message = "----- Books by Author: " + @au_fname + " " + @au_lname PRINT @message -- Declare an inner cursor based -- on au_id from the outer cursor. DECLARE titles_cursor CURSOR FOR SELECT t.title FROM titleauthor ta, titles t WHERE ta.title_id = t.title_id AND ta.au_id = @au_id -- Variable value from the outer cursor OPEN titles_cursor FETCH NEXT FROM titles_cursor INTO @title IF @@FETCH_STATUS <> 0 PRINT " <<No Books>>" WHILE @@FETCH_STATUS = 0 BEGIN SELECT @message = " " + @title PRINT @message FETCH NEXT FROM titles_cursor INTO @title END CLOSE titles_cursor DEALLOCATE titles_cursor -- Get the next author. FETCH NEXT FROM authors_cursor

Drac----68

Instalacin de SQLSERVER 2005

END

INTO @au_id, @au_fname, @au_lname

CLOSE authors_cursor DEALLOCATE authors_cursor GO -------- Utah Authors report ------------ Books by Author: Anne Ringer The Gourmet Microwave Is Anger the Enemy? ----- Books by Author: Albert Ringer Is Anger the Enemy? Life Without Fear

BACKUP

-- Create the backup device for the full MyNwind backup. USE master EXEC sp_addumpdevice 'disk', 'MyNwind_2', 'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_2.dat' --Create the log backup device. USE master EXEC sp_addumpdevice 'disk', 'MyNwindLog1', 'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwindLog1.dat' -- Back up the full MyNwind database. BACKUP DATABASE MyNwind TO MyNwind_2 -- Update activity has occurred since the full database backup. -- Back up the log of the MyNwind database. BACKUP LOG MyNwind TO MyNwindLog1

Drac----69

Instalacin de SQLSERVER 2005

WHILE
WHILE Boolean_expression {sql_statement | statement_block} [BREAK] {sql_statement | statement_block} [CONTINUE] A. Utilizar BREAK y CONTINUE con IF...ELSE y WHILE anidados En este ejemplo, si el promedio de precio es menor de $30, el bucle WHILE dobla los precios y, a continuacin, selecciona el precio mximo. Si el precio mximo es menor o igual que $50, el bucle WHILE se reinicia y dobla los precios de nuevo. Este bucle contina la duplicacin de precios hasta que el precio mximo sea mayor que $50 y, a continuacin, sale del bucle WHILE e imprime un mensaje.
USE pubs GO WHILE (SELECT AVG(price) FROM titles) < $30 BEGIN UPDATE titles SET price = price * 2 SELECT MAX(price) FROM titles IF (SELECT MAX(price) FROM titles) > $50 BREAK ELSE CONTINUE END PRINT 'Too much for the market to bear'

CASE
Evala una lista de condiciones y devuelve como resultado una de las distintas expresiones posibles. CASE tiene dos formatos:

La funcin CASE sencilla compara una expresin con un conjunto de expresiones sencillas para determinar el resultado. Drac----70

Instalacin de SQLSERVER 2005

La funcin CASE de bsqueda evala un conjunto de expresiones booleanas para determinar el resultado.

A. Utilizar una instruccin SELECT con una funcin CASE sencilla


USE pubs GO SELECT Category = CASE type WHEN 'popular_comp' THEN 'Popular Computing' WHEN 'mod_cook' THEN 'Modern Cooking' WHEN 'business' THEN 'Business' WHEN 'psychology' THEN 'Psychology' WHEN 'trad_cook' THEN 'Traditional Cooking' ELSE 'Not yet categorized' END, CAST(title AS varchar(25)) AS 'Shortened Title', price AS Price FROM titles WHERE price IS NOT NULL ORDER BY type, price COMPUTE AVG(price) BY type GO

B. Utilizar una instruccin SELECT con una funcin CASE sencilla y otra de bsqueda
USE pubs GO SELECT 'Price Category' = CASE WHEN price IS NULL THEN 'Not yet priced' WHEN price < 10 THEN 'Very Reasonable Title' WHEN price >= 10 and price < 20 THEN 'Coffee Table Title' ELSE 'Expensive book!' END, CAST(title AS varchar(20)) AS 'Shortened Title' FROM titles ORDER BY price GO

GOTO
Altera el flujo de ejecucin y lo dirige a una etiqueta. Las instrucciones GOTO y las etiquetas se pueden utilizar en cualquier punto de un procedimiento, lote o bloque de instrucciones. Las instrucciones GOTO se pueden anidar.
Drac----71

Instalacin de SQLSERVER 2005

Definicin de la etiqueta: label : Alteracin de la ejecucin: GOTO label


USE pubs GO DECLARE @tablename sysname SET @tablename = N'authors' tableLoop: IF (@@FETCH_STATUS <> -2) BEGIN SELECT @tablename = RTRIM(UPPER(@tablename)) EXEC ("SELECT """ + @tablename + """ = COUNT(*) FROM " + @tablename ) PRINT " " END FETCH NEXT FROM tnames_cursor INTO @tablename IF (@@FETCH_STATUS <> -1) GOTO tableLoop GO

WAITFOR
Especifica un tiempo, intervalo de tiempo o suceso que desencadena la ejecucin de un bloque de instrucciones, procedimiento almacenado o transaccin.

Sintaxis WAITFOR { DELAY 'time' | TIME 'time' } A. Utilizar WAITFOR TIME Este ejemplo ejecuta el procedimiento update_all_stats a las 10:20 p.m.
BEGIN WAITFOR TIME '22:20' EXECUTE update_all_stats END

almacenado

Drac----72

Instalacin de SQLSERVER 2005

B. Utilizar WAITFOR DELAY Se crea un procedimiento almacenado de forma que espere una cantidad de tiempo variable y, a continuacin, se devuelve al usuario la informacin como el nmero de horas, minutos y segundos que han transcurrido.
CREATE PROCEDURE time_delay @@DELAYLENGTH char(9) AS DECLARE @@RETURNINFO varchar(255) BEGIN WAITFOR DELAY @@DELAYLENGTH SELECT @@RETURNINFO = 'A total time of ' + SUBSTRING(@@DELAYLENGTH, 1, 3) + ' hours, ' + SUBSTRING(@@DELAYLENGTH, 5, 2) + ' minutes, and ' + SUBSTRING(@@DELAYLENGTH, 8, 2) + ' seconds, ' + 'has elapsed! Your time is up.' PRINT @@RETURNINFO END GO -- This next statement executes the time_delay procedure. EXEC time_delay '000:00:10' GO

GRANT
Crea una entrada en el sistema de seguridad que permite a un usuario de la base de datos actual trabajar con datos de la base de datos actual o ejecutar instrucciones TransactSQL especficas.
Sintaxis

Permisos de la instruccin: GRANT { ALL | statement [ ,...n ] } TO security_account [ ,...n ] Permisos del objeto:

Drac----73

Instalacin de SQLSERVER 2005

GRANT { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } TO security_account [ ,...n ] [ WITH GRANT OPTION ] [ AS { group | role } ] statement Es la instruccin para la que se concede el permiso. La lista de instrucciones puede contener:

CREATE DATABASE CREATE DEFAULT CREATE FUNCTION CREATE PROCEDURE CREATE RULE CREATE TABLE
CREATE VIEW BACKUP DATABASE BACKUP LOG

A. Conceder permisos sobre instrucciones


GRANT CREATE DATABASE, CREATE TABLE TO Mary, John, [Corporate\BobJ]

B. Conceder permisos de objeto dentro de la jerarqua de permisos


USE pubs GO GRANT SELECT ON authors

Drac----74

Instalacin de SQLSERVER 2005

TO funcion_public GO GRANT INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom GO

C. Conceder permisos a una funcin de SQL Server En este ejemplo se conceden permisos CREATE TABLE a todos los miembros de la funcin Accounting.
GRANT CREATE TABLE TO Accounting

D. Conceder permisos con la opcin AS


/* User Jean */ GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION /* User Jill */ GRANT SELECT ON Plan_Data TO Jack AS Accounting

Transact-SQL tiene estos tipos de datos base

Bigint datetime Money

Binario Decimal Nchar

Bit float ntext smallmoney

char image nvarchar text uniqueidentifier

cursor int real timestamp

smalldatetime Smallint Tinyint

Varbinary Varchar

bigint Datos enteros (nmeros enteros) comprendidos entre -2^63 (-9223372036854775808) y 2^63 -1 (9223372036854775807). int Datos enteros (nmeros enteros) comprendidos entre -2^31 (-2.147.483.648) y 2^31 - 1 (2.147.483.647).

Drac----75

Instalacin de SQLSERVER 2005

smallint Datos enteros comprendidos entre 215 (-32.768) y 215 - 1 (32.767). tinyint bit Datos enteros comprendidos 0 y 255.

Datos enteros con valor 1 0.

Decimal y numeric decimal Datos de precisin y escala comprendidos entre -1038 +1 y 1038 1. numeric numrica fijas

Funcionalmente equivalente a decimal.

money y smallmoney money Valores de moneda comprendidos entre -263 (922.337.203.685.477,5808) y 263 1 (+922.337.203.685.477,5807), con una precisin de una diezmilsima de la unidad monetaria. smallmoney Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con una precisin de una diezmilsima de la unidad monetaria. Numricos con aproximacin float Nmeros con precisin de coma flotante comprendidos entre -1,79E + 308 y 1,79E + 308. real Nmeros con precisin de coma flotante comprendidos entre -3,40E + 38 y 3,40E + 38. datetime y smalldatetime datetime Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisin de 3,33 milisegundos. smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6 de junio de 2079, con una precisin de un minuto.

Drac----76

Instalacin de SQLSERVER 2005

Cadenas de caracteres char Datos de caracteres no Unicode de longitud fija con una longitud mxima de 8.000 caracteres. varchar Datos no Unicode de mximo de 8.000 caracteres. longitud variable con un una

text Datos no Unicode de longitud variable con longitud mxima de 231 - 1 (2.147.483.647) caracteres.

Cadenas de caracteres Unicode nchar Datos Unicode de longitud variable con una longitud mxima de 4.000 caracteres. nvarchar Datos Unicode de longitud variable con una longitud mxima de 4.000 caracteres. sysname es el tipo de datos suministrado por el sistema y definido por el usuario que es funcionalmente equivalente a nvarchar(128) y que se utiliza para hacer referencia a nombres de objetos de bases de datos. ntext Datos Unicode de longitud variable con una longitud mxima de 230 - 1 (1.073.741.823) caracteres. Cadenas binarias binary Datos binarios de longitud fija con una longitud mxima de 8.000 bytes. varbinary Datos binarios de longitud variable con una longitud mxima de 8.000 bytes. image Datos binarios de longitud variable con una longitud mxima de 231 - 1 (2.147.483.647) bytes. Otros tipos de datos cursor Una referencia a un cursor.

Drac----77

Instalacin de SQLSERVER 2005

sql_variant Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, timestamp y sql_variant. table Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para un proceso posterior. timestamp Un nmero nico para toda la base de datos que se actualiza cada vez que se actualiza una fila. uniqueidentifier CAST y CONVERT Convierten explcitamente una expresin de un tipo de datos en otro. CAST y CONVERT proporcionan funciones similares. Sintaxis Uso de CAST: CAST ( expression AS data_type ) Uso de CONVERT: CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
DECLARE @myval decimal (5, 2) SET @myval = 193.57 --SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5)) -- Or, using CONVERT SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))

Un identificador exclusivo global (GUID).

C. Utilizar CAST para concatenar Este ejemplo concatena expresiones que no son de texto ni tipo binary mediante la funcin de conversin de tipos de datos CAST.
USE pubs

Drac----78

Instalacin de SQLSERVER 2005

GO SELECT 'The price is ' + CAST(price AS varchar(12)) FROM titles WHERE price > 10.00 GO

Nota Como los datos Unicode siempre utilizan un nmero par de bytes, preste atencin al convertir binary o varbinary en tipos de datos aceptados en Unicode, y viceversa. Por ejemplo, esta conversin no devuelve el valor hexadecimal 41, sino 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)

COALESCE Devuelve la primera expresin no NULL entre sus argumentos. Sintaxis COALESCE ( expression [ ,...n ] )
SELECT CAST(COALESCE(hourly_wage * 40 * 52, salary, commission * num_sales) AS money) AS 'Total Salary' FROM wages GO

Drac----79

Instalacin de SQLSERVER 2005

GUA DE EJERCICIOS: Modelo Entidad/Relacin y Conversin a Modelo Relacional


Modelo Entidad/Relacin Problema 1 (*): Artculos y encargos
Una base de datos para una pequea empresa debe contener informacin acerca de clientes, artculos y pedidos. Hasta el momento se registran los siguientes datos en documentos varios: 1. Para cada cliente: Nmero de cliente (nico), Direcciones de envo (varias por cliente), Saldo, Lmite de crdito (depende del cliente, pero en ningn caso debe superar los 3.000.00), Descuento. 2. Para cada artculo: Nmero de artculo (nico), Fbricas que lo distribuyen, Existencias de ese artculo en cada fbrica, Descripcin del artculo. 3. Para cada pedido: Cada pedido tiene una cabecera y el cuerpo del pedido. La cabecera est formada por el nmero de cliente, direccin de envo y fecha del pedido. El cuerpo del pedido son varias lneas, en cada lnea se especifican el nmero del artculo pedido y la cantidad. Adems, se ha determinado que se debe almacenar la informacin de las fbricas. Sin embargo, dado el uso de distribuidores, se usar: Nmero de la fbrica (nico) y Telfono de contacto. Y se desean ver cuntos artculos (en total) provee la fbrica. Tambin, por informacin estratgica, se podra incluir informacin de fbricas alternativas respecto de las que ya fabrican artculos para esta empresa. Nota: Una direccin se entender como N, Calle, Comuna y Ciudad. Una fecha incluye hora. Se pide hacer el diagrama Entidad Relacin para la base de datos que represente esta informacin.

Problema 2 (*): Sistema de ventas

Drac----80

Instalacin de SQLSERVER 2005

Le contratan para hacer una BD que permita apoyar la gestin de un sistema de ventas. La empresa necesita llevar un control de proveedores, clientes, productos y ventas. Un proveedor tiene un RUT, nombre, direccin, telfono y pgina web. Un cliente tambin tiene RUT, nombre, direccin, pero puede tener varios telfonos de contacto. La direccin se entiende por calle, nmero, comuna y ciudad. Un producto tiene un id nico, nombre, precio actual, stock y nombre del proveedor. Adems se organizan en categoras, y cada producto va slo en una categora. Una categora tiene id, nombre y descripcin. Por razones de contabilidad, se debe registrar la informacin de cada venta con un id, fecha, cliente, descuento y monto final. Adems se debe guardar el precio al momento de la venta, la cantidad vendida y el monto total por el producto.

Problema 3: Carreteras
Disear un esquema Entidad Relacin que recoja la organizacin de una base de datos para contener la informacin sobre todas las carreteras del pas, sabiendo que se deben cumplir las siguientes especificaciones: 1. Las carreteras estn divididas en varias categoras (locales, comerciales, regionales, nacionales, autovas, etc). 2. Las carreteras se dividen en tramos. Un tramo siempre pertenece a una nica carretera y no puede cambiar de carretera. 3. Un tramo puede pasar por varias comunas, interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina. 4. Para los tramos que suponen principio o carretera, interesa saber si es que la concluye fsicamente o es que confluye carretera. En este caso, interesa conocer carretera confluye y en qu kilmetro, tramo y final de carretera en otra con qu comuna.

Problema 4: Sistema de vuelos


Obtener el diagrama E/R para un sistema de control de vuelos adaptado a las siguientes reglas de gestin (indicar las

Drac----81

Instalacin de SQLSERVER 2005

entidades, interrelaciones, etc., que se deducen de cada una de las reglas): 1. De cada aeropuerto se conoce su cdigo, nombre, ciudad y pas. 2. En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avin determina su capacidad, es decir, el nmero de plazas. 3. En cada aeropuerto existe una coleccin de programas de vuelo. En cada programa de vuelo se indica el nmero de vuelo, lnea area y das de la semana en que existe dicho vuelo. 4. Cada programa de vuelo despega de un aeropuerto y aterriza en otro. 5. Los nmeros de vuelo son nicos para todo el mundo. 6. En cada aeropuerto hay mltiples aterrizajes y despegues. Todos los aeropuertos contemplados estn en activo, es decir, tienen algn aterrizaje y algn despegue. 7. Cada vuelo realizado pertenece a un cierto programa de vuelo. Para cada vuelo se quiere conocer su fecha, plazas vacas y el modelo de avin utilizado. 8. Algunos programas de vuelo incorporan escalas tcnicas intermedias entre los aeropuertos de salida y de llegada. Se entiende por escala tcnica a un aterrizaje y despegue consecutivos sin altas bajas de 9. pasajeros. 10. De cada vuelo se quieren conocer las escalas tcnicas ordenadas asignndole a cada una un nmero de orden. Por ejemplo, el programa de vuelo 555 de Icaro con vuelos los lunes y jueves despega de Guayaquil Guayas - Ecuador y aterriza en New Yor-USA teniendo las siguientes escalas tcnicas: 1-Bogota Colombia, 2-Cuidad de Panam-Panam y 3- Orlando - Florida.
Que cambios se producirn en el caso anterior si en las escalas pudiesen bajar o subir pasajeros? Explicar cmo se podra representar esta nueva situacin.

Problema 5 (*): Olimpadas


Las sedes olmpicas se dividen en complejos deportivos. Los complejos deportivos se subdividen en aquellos en los que se desarrolla un nico deporte y en los polideportivos. Los complejos polideportivos tienen reas designadas para cada deporte con un indicador de localizacin (ejemplo: centro, esquina-NE, etc.). Un complejo tiene una localizacin, un jefe de organizacin individual y un rea total ocupada.

Drac----82

Instalacin de SQLSERVER 2005

Los dos tipos de complejos (deporte nico y polideportivo) tendrn diferentes tipos de informacin. Para cada tipo de sede, se conservar el nmero de complejos junto con su presupuesto aproximado.

Cada complejo celebra una serie de eventos (ejemplo: la pista del estadio puede celebrar muchas carreras distintas.). Para cada evento est prevista una fecha, duracin, nmero de participantes, nmero de comisarios. Una lista de todos los comisarios se conservar junto con la lista de los eventos en los que est involucrado cada comisario ya sea cumpliendo la tarea de juez u observador. Tanto para cada evento como para el mantenimiento se necesitar cierto equipamiento (ejemplo: arcos, prtigas, barras paralelas, etc).

Problema 6: Educando S.A.


En la Empresa "Educando S.A." se lleva control de sus Bienes y Servicios. El inters primario es poder hacer que los Bienes se manejen de forma rpida y con el menor grado de error. Para esto quien maneja la seccin de "Bienes y Suministros" plantea las siguientes condiciones del negocio para la construccin de una base de datos:
La Seccin est dividida en tres (3) reas: COMPRAS, ALMACEN, INVENTARIO

El rea de Compras funciona de la siguiente forma:


Recibe las solicitudes de compras de las diferentes reas de la empresa. Cada solicitud tiene un responsable. Cada solicitud es autorizada por el jefe posteriormente por el Director Financiero. del rea y

Quien realiza una solicitud puede ser responsable de uno o varios centros de costos, con la salvedad de que l como empleado solo est adscrito a uno. De la solicitud se debe diligenciar la siguiente informacin: Nmero de la solicitud (consecutivo), Fecha, Responsable (nombre y cdula), Centro de Costos, Rubro presupuestal del cual se descargar la compra. En cada solicitud se pueden discriminar uno o muchos tems con la siguiente informacin: tem, nombre del bien, cantidad solicitada, unidad de medida del bien, valor unitario y valor total. Cada solicitud debe ser totalizada.

Drac----83

Instalacin de SQLSERVER 2005

Cada bien es identificado por un cdigo universal que es nico y es de carcter devolutivo (suministro) o un bien inmueble. Una vez diligenciada la solicitud es remitida al rea de compras para realizar su correspondiente cotizacin. Las cotizaciones son realizadas con proveedores de los bienes solicitados. uno o varios

Una vez la cotizacin definitiva est lista, se crea una orden contractual que maneja la siguiente informacin: Nmero de la orden contractual, nit y nombre del proveedor al cual se le va a realizar la compra, fecha de la orden, monto total de la orden, fecha de entrega. Cada orden puede tener asociado uno o varios tems de la solicitud o solicitudes que van a ser despachadas. Cada tem tiene la siguiente informacin: nombre del bien, cantidad solicitada, cantidad despachada, unidad de medida del bien, valor unitario y valor total. La orden de compra es aprobada por el Director Financiero para que sea enviada al proveedor elegido.

El rea de Almacn funciona de la siguiente forma:


Su funcin principal es recepcionar los bienes que llegan de los proveedores y distribuirlos a las correspondientes reas que realizaron las solicitudes de compras. Cuando llega un proveedor mercanca, este hace una entrega fsica de los bienes, los cuales son comparados con la factura que este entrega y con la orden de compra correspondiente. Si esta accin es correcta se registra una entrada de almacn por cada factura relacionada, con la siguiente informacin: Nmero de Entrada, Fecha, Nmero de factura, Proveedor, Total Bienes, Valor Total (los totales deben coincidir con los de la factura). Adjunto a esta se discriminan los tems recibidos con la siguiente informacin: nombre del bien, cantidad entregada. Cuando el almacn decide despachar los bienes a las diferentes reas solicitantes, registra cada una de las entregas en Salidas de Almacn con la siguiente informacin: Nmero de Salida, Empleado responsable del bien a entregar, fecha de salida, fecha de entrega. Por cada entrega se detalla cada uno de los tems con la siguiente informacin: nombre del bien, cantidad entregada.

Drac----84

Instalacin de SQLSERVER 2005

Una entrada de almacn puede generar muchas salidas de almacn, por Ejemplo : Pueden ingresar 500 pacas de papel higinico, pero como se debe repartir entre varias reas, cada una requiere de una salida de almacn.

El rea de inventarios funciona de la siguiente forma:


Es la encargada de administrar y controlar la ubicacin de los bienes dentro de la empresa, por esto antes de que el bien salga del almacn debe ser codificado a travs de un cdigo nico que lo haga identificable dentro de la empresa. La ubicacin del bien se identifica por informacin: responsable del bien, fecha direccin del bien (ubicacin). Disear modelo ER para la base de datos. la siguiente de entrega,

Problema 7: Torneo de Tenis Grand Slam


El sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo, as como las siguientes caractersticas de estos.

Descripcin:
El Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretaa, Estados Unidos, Francia y Australia. En cada pas se pueden desarrollar en distintos lugares (p. ej., en EE.UU. puede desarrollarse en Forest Hill o en Flashing Meadows).
Cada partido tiene asociado un premio de consolacin para el perdedor que depender de la fase en que se encuentre el torneo (por ej., el perdedor de octavos de final puede ganar 5.000 dlares). El ganador de a final recibir el premio correspondiente al torneo.

Cada torneo tiene cinco modalidades: Individual masculino, individual femenino, dobles masculino, dobles femenino y dobles mixtos. Tambin hay que tener jugador, de forma que varias nacionalidades. en cuenta la nacionalidad de un este puede ser aptrida o tener

Drac----85

Instalacin de SQLSERVER 2005

Resultados a considerar:
El sistema debe dar respuesta a las siguientes preguntas:

1. Dado un ao y un torneo, composicin y resultado de los partidos. 2. Lista de rbitros que participaron en el torneo. 3. Ganancias percibidas en premios por un jugador a lo largo del torneo. 4. Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo.
Ejemplos de acceso a la base de datos.

1. Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por 6-3 4-6/7-5 6-0. 2. El seor Wilkinson arbitro ese partido. 3. Alemania ha ganado dos veces las individuales masculinas de Wimbledon. Borg ha ganado 2.000.000 de dlares a lo largo de su participacin en el Grand Slam. 4. El ganado de Roland Garros de 1987 gan 20.000 dlares. 5. Noah ha jugado cuatro veces en dobles mixtos con Mandlikova.

Problema 8:
Se desea crear un sitio web con informacin referente a las pelculas en cartel en las salas de un dudoso cine cercano a la plaza de armas. De cada pelcula, se almacena una ficha con su ttulo de distribucin, su ttulo original, su gnero, el idioma origina, si tiene subttulos en espaol o no, los pases de origen, el ao de la produccin, la url del sitio web de la pelcula, la duracin (en horas y minutos), la calificacin (Apta todo pblico,+9 aos, +15 aos,+18 aos), fecha de estreno en Santiago, un resumen y un identificador de la pelcula. De cada pelcula interesa conocer la lista de directores y el reparto, es decir para cada actor que trabaja, el nombre de todos los personajes que interpreta. Adems interesa disponer de informacin sobre los directores y actores que trabajan en cada pelcula. De ambos, se conoce su nombre (que lo identifica) y su nacionalidad. Adems se desea conocer la cantidad de pelculas Drac----86

Instalacin de SQLSERVER 2005

en las que dirigieron o actuaron. personas que cumplen los dos roles.

Tenga

en

cuenta

que

hay de de de la

Los cines pueden tener ms de una sala y cada semana cada uno los cines enva la cartelera para dicha semana, indicando detalle de las funciones. Para cada funcin se conoce el da la semana y la hora de comienzo, y obviamente la sala y pelcula que exhibe.

De cada sala se sabe el nombre, un nmero que la identifica dentro del cine y la cantidad de butacas que posee. De cada cine se conoce el nombre que lo identifica, su direccin y telfono para consultas. Algunos cines cuentan con promociones. Estas promociones dependen de la funcin. (Ej. De lunes a jueves antes de las 18 50% de descuento en la sala tal del cine tal para la pelcula cual. La funcin del lunes a las 14 para la pelcula tal en la sala cual, no se cobra a los escolares con tnica) De cada promocin se conoce una descripcin y el descuento que aplica.
Adems del resumen de la pelcula que se incluye en la ficha interesa mostrar la opinin de las personas que vieron la pelcula. De cada opinin se conoce el nombre de la persona que la realiza, su edad, le fecha en que registr su opinin, la calificacin que le dio a la pelcula (Obra Maestra, Muy Buena, Buena, Regular, Mala) y el comentario propiamente dicho. A cada opinin se le asigna un nmero que la identifica respecto de la pelcula sobre la cual opina.

Drac----87

Instalacin de SQLSERVER 2005

GLOSARIOS bigint Datos enteros (nmeros enteros) comprendidos entre -2^63 (-9223372036854775808) y 2^63 -1 (9223372036854775807). int Datos enteros (nmeros enteros) comprendidos entre -2^31 (-2.147.483.648) y 2^31 - 1 (2.147.483.647). smallint Datos enteros comprendidos entre 215 (-32.768) y 215 - 1 (32.767). tinyint bit bit Datos enteros con valor 1 0. Datos enteros comprendidos 0 y 255.

Decimal y numeric decimal Datos de precisin y escala comprendidos entre -1038 +1 y 1038 1. numeric numrica fijas

Funcionalmente equivalente a decimal.

money y smallmoney money Valores de moneda comprendidos entre -263 (922.337.203.685.477,5808) y 263 1 (+922.337.203.685.477,5807), con una precisin de una diezmilsima de la unidad monetaria. smallmoney Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con una precisin de una diezmilsima de la unidad monetaria. Numricos con aproximacin float Nmeros con precisin de coma flotante comprendidos entre -1,79E + 308 y 1,79E + 308.

Drac----88

Instalacin de SQLSERVER 2005

real Nmeros con precisin de coma flotante comprendidos entre -3,40E + 38 y 3,40E + 38. datetime y smalldatetime datetime Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisin de 3,33 milisegundos. smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6 de junio de 2079, con una precisin de un minuto. Cadenas de caracteres char Datos de caracteres no Unicode de longitud fija con una longitud mxima de 8.000 caracteres. varchar Datos no Unicode de mximo de 8.000 caracteres. longitud variable con un una

text Datos no Unicode de longitud variable con longitud mxima de 231 - 1 (2.147.483.647) caracteres. Cadenas de caracteres Unicode

nchar Datos Unicode de longitud variable con una longitud mxima de 4.000 caracteres. nvarchar Datos Unicode de longitud variable con una longitud mxima de 4.000 caracteres. sysname es el tipo de datos suministrado por el sistema y definido por el usuario que es funcionalmente equivalente a nvarchar(128) y que se utiliza para hacer referencia a nombres de objetos de bases de datos. ntext Datos Unicode de longitud variable con una longitud mxima de 230 - 1 (1.073.741.823) caracteres. Cadenas binarias binary Datos binarios de longitud fija con una longitud mxima de 8.000 bytes.

Drac----89

Instalacin de SQLSERVER 2005

varbinary Datos binarios de longitud variable con una longitud mxima de 8.000 bytes. image Datos binarios de longitud variable con una longitud mxima de 231 - 1 (2.147.483.647) bytes. Otros tipos de datos cursor Una referencia a un cursor.

sql_variant Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, timestamp y sql_variant. table Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para un proceso posterior. timestamp Un nmero nico para toda la base de datos que se actualiza cada vez que se actualiza una fila. uniqueidentifier Un identificador exclusivo global (GUID).

Drac----90

Instalacin de SQLSERVER 2005

GUA DE EJECUCIN DE SCRIPT SQLSERVER 2005


Creando Base de Datos
USE master GO CREATE DATABASE Gesconpa ON ( NAME = GesconpaDat, FILENAME = 'c:\pcm\cas-002\GesconpaDat.mdf', SIZE = 10 MB, MAXSIZE = 40 MB, FILEGROWTH = 10 MB ) LOG ON ( NAME = GesconpaLog, FILENAME = 'c:\pcm\cas-002\GesconpaLog.ldf', SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 1MB ) GO

Creando Tablas
use GesconpaSTDPC12 go

/************************************/ /* Eliminacin de Tablas si existen */ /************************************/


if exists (select * from sysobjects where id = object_id(N'dbo.TablasGenerales') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.TablasGenerales GO if exists (select * from sysobjects where id = object_id(N'dbo.DetalleAprobacionOrdenesDePago') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.DetalleAprobacionOrdenesDePago GO

Drac----91

Instalacin de SQLSERVER 2005

if exists (select * from sysobjects where id = object_id(N'dbo.AprobacionOrdenesDePago') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.AprobacionOrdenesDePago GO if exists (select * from sysobjects where id = object_id(N'dbo.DetalleOrdenesDePago') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.DetalleOrdenesDePago GO if exists (select * from sysobjects where id = object_id(N'dbo.DividendosFacturasPorPagar') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.DividendosFacturasPorPagar GO if exists (select * from sysobjects where id = object_id(N'dbo.OrdenesDePago') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.OrdenesDePago GO if exists (select * from sysobjects where id = object_id(N'dbo.DetalleFacturasPorPagar') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.DetalleFacturasPorPagar GO if exists (select * from sysobjects where id = object_id(N'dbo.FacturasPorPagar') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.FacturasPorPagar GO if exists (select * from sysobjects where id = object_id(N'dbo.PlanesDePago') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.PlanesDePago GO if exists (select * from sysobjects where id = object_id(N'dbo.DetallePlanDePago') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.DetallePlanDePago GO if exists (select * from sysobjects where id = object_id(N'dbo.Proveedores') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.Proveedores GO

Drac----92

Instalacin de SQLSERVER 2005

if exists (select * from sysobjects where id = object_id(N'dbo.EntidadesDePago') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.EntidadesDePago GO if exists (select * from sysobjects where id = object_id(N'dbo.ProductosYServicios') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table dbo.ProductosYServicios GO

/******************************************/ /* Creacin de Tablas de la base de datos */ /******************************************/ /* TablasGenerales */


CREATE TABLE TablasGenerales (CodTabla char(3) NOT NULL, CodSubTabla varchar(10) NOT NULL, Contenido varchar(100) NOT NULL ) GO

/* PlanesDePago */
CREATE TABLE PlanesDePago (CodPlanPago uddCodPlanPago Descripcion varchar(100) CodUnidadTiempo varchar(2) NOT NULL, CodEstado uddEstado NOT NULL ) GO NOT NULL, NOT NULL,

/* DetallePlanDePago */
CREATE TABLE DetallePlanDePago (CodPlanPago uddCodPlanPago NOT NULL, NoDividendo tinyint NOT NULL, Descripcion varchar(100) NOT NULL, CantidadTiempo smallint NOT NULL, Porcentaje tinyint NOT NULL ) GO

/* Proveedores */
CREATE TABLE Proveedores (CodProveedor uddCodProveedor Nombre varchar(255) CodTipo char(1) NOT NULL, NOT NULL, NOT NULL,

Drac----93

Instalacin de SQLSERVER 2005

FechaIngreso uddFecha NOT CodMoneda uddCodMoneda NOT TieneLineaCredito bit NOT ValorMaxCredito numeric(10,2) NOT TelefonoUno varchar(6) NOT TelefonoDos varchar(6) NOT Direccion varchar(50) NOT Pais varchar(20) NOT Estado varchar(20) Ciudad varchar(20) CodPlanPago uddCodPlanPago CodEstado uddEstado NOT NULL ) GO

NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NOT NULL, NOT NULL, NULL,

/* ProductosYServicios */
CREATE TABLE ProductosYServicios (CodProdServi uddCodProdServi CodTipo char(1) NOT NombreProdServi varchar(255) NOT NombreVenta varchar(100) Marca varchar(20) NOT FechaIngreso uddFecha NOT CodUnidadMedida uddCodUnidadMedida NOT CodMoneda uddCodMoneda NOT CodProveedorPredet uddCodProveedor Comentario varchar(255) CodEstado uddEstado NOT NULL ) GO NOT NULL, NULL, NULL, NOT NULL, NULL, NULL, NULL, NULL, NULL, NOT NULL,

/* FacturasPorPagar */
CREATE TABLE FacturasPorPagar (CodSucursal uddCodSucursal CodFacturaInterno uddCodFacturaInterno CodFacturaImpreso varchar(20) NOT CodProveedor uddCodProveedor CodMoneda uddCodMoneda NOT EsContraOC bit NOT NULL, CodOrdenCompra char(10) NOT CodPlanPago uddCodPlanPago FechaIngreso uddFecha NOT FechaEmisin uddFecha NOT FechaVencimiento uddFecha NOT NULL, ValorParcial numeric(10,2) ValorIVA numeric(10,2) NOT ValorTotal numeric(10,2) NOT ValorPagadoParcial numeric(10,2) ValorPagadoIVA numeric(10,2) ValorSaldo numeric(10,2) NOT Descripcion varchar(255) CodEstado char(1) NOT NOT NULL, NOT NULL, NULL, NOT NULL, NULL, NULL, NOT NULL, NULL, NULL, NOT NULL, NULL, NOT NOT NULL, NOT NULL NULL, NULL, NULL, NULL,

Drac----94

Instalacin de SQLSERVER 2005

) GO

/* DetalleFacturasPorPagar */
CREATE TABLE DetalleFacturasPorPagar (CodSucursal uddCodSucursal CodFacturaInterno uddCodFacturaInterno NoDetalle tinyint NOT CodProdServi uddCodProdServi Cantidad integer NOT ValorUnitario numeric(10,2) ValorParcial numeric(10,2) ValorIVA numeric(10,2) NOT ValorTotal numeric(10,2) NOT ) GO NOT NOT NULL, NOT NULL, NOT NOT NULL, NULL NULL, NULL, NULL, NULL, NULL,

/* DividendosFacturasPorPagar */
CREATE TABLE DividendosFacturasPorPagar (CodSucursal uddCodSucursal NOT CodFacturaInterno uddCodFacturaInterno NOT NoDividendo uddNoDividendo NOT ValorParcial numeric(10,2) NOT ValorIVA numeric(10,2) NOT NULL, ValorTotal numeric(10,2) NOT NULL, FechaVencimiento uddFecha NOT NULL, FechaPago uddFecha NULL ) GO /* OrdenesDePago */ NULL, NULL, NULL, NULL,

CREATE TABLE OrdenesDePago


(CodSucursal CodOrdenPago CodProveedor CodMoneda FechaEmisin FechaVencimiento FechaPago ValorParcial ValorIVA ValorTotal CodEstado ) GO uddCodSucursal uddCodOrdenPago uddCodProveedor uddCodMoneda NOT uddFecha NOT uddFecha NOT uddFecha NULL, numeric(10,2) numeric(10,2) NOT numeric(10,2) NOT uddEstado NOT NULL NOT NULL, NOT NULL, NOT NULL, NULL, NULL, NULL, NOT NULL, NULL, NULL,

/* DetalleOrdenesDePago */
CREATE TABLE DetalleOrdenesDePago (CodSucursal uddCodSucursal NOT NULL,

Drac----95

Instalacin de SQLSERVER 2005

CodOrdenPago uddCodOrdenPago NOT NULL, NoDetalle tinyint NOT NULL, CodSucursalFactura uddCodSucursal NOT NULL, CodFacturaInterno uddCodFacturaInterno NOT NULL, NoDividendo uddNoDividendo NOT NULL, ValorParcial numeric(10,2) NOT NULL, ValorIVA numeric(10,2) NOT NULL, ValorTotal numeric(10,2) NOT NULL ) GO

/* AprobacionOrdenesDePago */
CREATE TABLE AprobacionOrdenesDePago (CodSucursal uddCodSucursal CodAprobacion uddCodAprobacion NOT CodProveedor uddCodProveedor CodMoneda uddCodMoneda NOT FechaEmision uddFecha NOT CodFormaPago char(3) CodTipoEntidad uddCodTipoEntidad NOT CodEntidad uddCodEntidad NOT ValorParcial numeric(10,2) ValorIVA numeric(10,2) NOT ValorTotal numeric(10,2) NOT CodEstado uddEstado NOT NULL, ) GO NOT NULL, NOT NULL, NULL, NOT NULL, NULL, NOT NULL, NULL, NULL, NULL, NULL, NULL,

/* DetalleAprobacionOrdenesDePago

*/

CREATE TABLE DetalleAprobacionOrdenesDePago (CodSucursal uddCodSucursal NOT NULL, CodAprobacion uddCodAprobacion NOT NULL, CodOrdenPago uddCodOrdenPago NOT NULL, ValorParcial numeric(10,2) NOT NULL, ValorIVA numeric(10,2) NOT NULL, ValorTotal numeric(10,2) NOT NULL ) GO

/* EntidadesDePago */
CREATE TABLE EntidadesDePago (CodSucursal uddCodSucursal NOT NULL, CodTipoEntidad uddCodTipoEntidad NOT NULL, CodEntidad uddCodEntidad NOT NULL, CodMoneda uddCodMoneda NOT NULL, Nombre varchar(100) NOT NULL, ValorApertura numeric(10,2) NOT NULL, ValorSaldoActual numeric(10,2) NOT NULL, CodEstado uddEstado NOT NULL ) GO

Drac----96

S-ar putea să vă placă și