Introduccion a SQL Server 2000 (Buen Manual)

192
S ISTEMAS UNI SQL SERVER Implementacion Pag.1

description

Un muy buen libro acerca de sql server 2000. Muy completo con ejemplos

Transcript of Introduccion a SQL Server 2000 (Buen Manual)

Page 1: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.1

Page 2: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.2

SQL Server es un Sistema de Gestión de Bases de Datos Relaciónales (SGBDR), desarrollado por Microsoft, que permite, como su propio nombre indica, la gestión de un entorno de bases de datos relacional. SQL Server abarca, tanto el área de diseño, como la de administración, proporcionando un interfaz bastante amigable con el usuario. ¿Por qué se llama SQL Server?. Pues bien, se llama SQL porque utiliza este lenguaje para la definición y manejo de los datos, y se llama Server porque dispone de una parte servidora que se encarga de atender a los procesos clientes, que son los que realizan las peticiones a éste; es decir, sigue una arquitectura cliente/servidor. SQL Server utiliza una extensión al SQL estándar, que se denomina Transact SQL. Esto quiere decir que soporta el SQL de ANSI, pero además se le han añadido ciertas funciones adicionales, no contempladas en el estándar, y que son específicas para este producto, es decir, si ejecutamos una sentencia del conjunto adicional (Transact SQL) en otro SGBRD, éste no la entendería. El Transact SQL, soporta la definición, modificación y eliminación de bases de datos, tablas, atributos, índices, etc., es decir, el lenguaje de definición de datos (DDL), así como la consulta, actualización y borrado de Tuplas o Registros de tablas, es decir, el lenguaje de manipulación de datos (DML). El curso sera totalmente practico con bastantes ejercicios para que puedes aprender y dominar los comandos esenciales para que puedas aplicarlos en distintas necesidades que el mercado laboral como Administrador de bases de datos o como desarrollador de sistemas Cliente / Servidor o para aplicaciones en un entorno WEB.

Docente de sistemas UNI

PROFESOR:HENRY CHAVEZ VIERA

Page 3: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LO NUEVO EN SQL-SERVER 2000 Veremos en esta sesion las mejoras que ha sufrido esta versión 2000, con respecto a las anteriores, mejoras que pasamos a detallar a continuación.

NUEVAS CARACTERÍSTICAS Entre las nuevas características que ofrece SQL-Server 2000, cabe destacar las siguientes:

• Soporte para XML. • Funciones de usuario. • Indexación de vistas. • Nuevos tipos de datos. • Nuevos triggers. • Reglas de integridad referencial en cascada. • Nuevas características de indexación. • Soporte para consultas distribuidas. • Características de seguridad y cifrado de datos.

SOPORTE PARA XML El Extensible Markup Language, más conocido como XML es un metalenguaje, es decir, un lenguaje utilizado para definir lenguajes, y que se usa sobre todo para el intercambio de datos. Su sintaxis es similar a la que nos ofrece el HTML, es decir, un conjunto de etiquetas que definen la estructura de los datos. El Código fuente 2 define un posible formato de intercambio. <cliente> <nombre>Pepe</nombre> <apellidos>Lopez</apellidos> <telefono>912345678</telefono> </cliente> SQL-Server 2000 ofrece la posibilidad de devolver un conjunto de resultados utilizando para ello este tipo de formato, facilitando así el intercambio de datos.

SQL SERVER Implementacion Pag.3

Page 4: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

FUNCIONES DE USUARIO

Una funcionalidad nueva que aparece en esta versión del SGBD es la de permitir al usuario definir sus propias funciones. De esta forma se pueden definir funciones que oculten parte de la complejidad que puede entrañar una consulta, no sólo para la posterior reutilización de la misma, sino también teniendo en cuenta la abstracción para otros programadores que puedan precisar su uso.

INDEXACIÓN DE VISTAS

Esta funcionalidad permite optimizar la ejecución de vistas que actúan sobre la base de datos, creando índices sobre los resultados de ejecución de la misma, que son almacenados en la base de datos. El usuario no debe preocuparse de la actualización de los datos, sino que éstos son indexados automáticamente cada vez que se actualicen.

NUEVOS TIPOS DE DATOS

SQL-Server 2000 soporta tres nuevos tipos de datos con respecto a la anterior versión, la 7, que son el bigint o entero de 8 bytes, sql_variant, que soporta el almacenamiento de valores de distintos tipos, y table, que permite el almacenamiento temporal de resultados para su uso posterior.

NUEVOS TRIGGERS

Un trigger o desencadenador es un código especial que se ejecuta cuando se cumple una determinad a condición, como por ejemplo al modificar o borrar datos (se verá en detalle en un capítulo posterior).

SQL-Server 2000 soporta dos nuevos tipos de triggers, que son INSTEAD OF y que sustituye el comportamiento de ciertos comandos, como por ejemplo insert, update o delete, y AFTER, que se ejecuta una vez concluida la acción que lo ha desencadenado.

REGLAS DE INTEGRIDAD REFERENCIAL EN CASCADA

Las reglas de integridad referencial son la base del mantenimiento de la consistencia en la base de datos, y hacen referencia a información que esta relacionada entre si, como por ejemplo el departamento de un empleado cuyo código se especifica. La forma más usual de mantenerlo es usando claves foráneas, y especificando el comportamiento de las inserciones, borrados y actualizaciones de este tipo de datos.

SQL SERVER Implementacion Pag.4

Page 5: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

NUEVAS CARACTERÍSTICAS DE INDEXACIÓN Las nuevas características de indexación permiten crear índices sobre campos calculados (no existen como tal en la base de datos, sino que se calculan a partir de otros valores), así como especificar si se desea construir estos índices de manera paralela, lo que aumenta la velocidad de procesado.

SOPORTE PARA CONSULTAS DISTRIBUIDAS El optimizador de consultas ofrece la funcionalidad de ubicar datos en servidores distribuidos, dependiendo de valores tales como el nivel de carga, el tráfico de red, etc., de manera que las consultas pueden acceder a distintos servidores para obtener el resultado final.

CARACTERÍSTICAS DE SEGURIDAD Y CIFRADO DE DATOS SQL-Server 2000 utiliza Kerberos como servidor de autenticación, para acreditar el acceso al servidor que se realiza desde el cliente, así como diversas técnicas de seguridad.

VERSIONES DE SQL SERVER Existen varias ediciones de SQL Server. Es muy fácil escogerla basándose en la cantidad de memoria y el número de CPUs que es necesario utilizar. Las ediciones de SQL Server se describen aquí.

SOFTWARE PARA CLIENTES Los componentes para clientes de SQL Server 2000 consisten en las bibliotecas y

utilidades de red necesarias para acceder a un sistema SQL Server remoto o local. Estos componentes son necesarios para que cualquier sistema acceda a SQL Server, y son idénticos independientemente de la edición de SQL Server instalada.

PERSONAL EDITION

La versión Personal Edition de SQL Server está diseñada para pequeñas bases de datos a las que se accede localmente en un sistema cliente. SQL Server 2000 Personal Edition no permite que otros equipos obtengan acceso a la base de datos.

STANDARD EDITION

SQL Server 2000 Standar Edition es una de las dos ediciones servidoras de SQL Server 2000. La versión Standar Edition funciona de la misma forma que la versión Enterprise Edition, excepto que sólo se puede acceder a un máximo de cuatro CPUs y 4 GB de memoria con la versión Standar Edition.

SQL SERVER Implementacion Pag.5

Page 6: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ENTERPRISE EDITION

La versión Enterprise Edition de SQL Server soporta todas las características y la funcionalidad de todas las versiones de Windows 2000. SQL Server 2000 Enterprise Edition requiere Windows 2000 Advanced Server o Windows 2000 Datacenter. Además, SQL Server 2000 Enterprise Edition soporta clústeres de conmutación por error y vistas distribuidas actualizables.

SQL SERVER Implementacion Pag.6

Page 7: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.7

Page 8: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

INSTALACIÓN DE SQL SERVER 2000 En este capítulo, veremos como instalar SQL Server 2000, y las distintas opciones que plantea.

1. Para empezar, introduzca el CD-ROM que contiene el programa. Si no arranca automáticamente, utilice el explorador para ejecutar el fichero autorun contenido en el CD-ROM.

a. Tenemos dos opciones, la STANDARD o la PERSONAL.

i. La primera de ellas realiza una instalación completa, incluyendo los componentes servidor, mientras que la segunda es útil en el caso de que no dispongamos de un servidor. La primera pantalla que aparece es la que se muestra en la Figura

En nuestro caso instalaremos la opción STANDARD (si no disponemos de un servidor, únicamente se instalarán los componentes cliente).

2. En principio, el único requisito que se necesita es disponer de un equipo con al menos

64 Mb de memoria RAM (recomendable 128 Mb) y sistema operativo Windows 98/NT/2000, en el cual se haya instalado la versión 5.5 del navegador WEB Microsoft Internet Explorer.

SQL SERVER Implementacion Pag.8

Page 9: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI .

3. Para proseguir la instalación, pulsamos la opción SQL Server 2000 Components, apareciéndonos la pantalla que muestra la Figura

4. Pulsamos el botón Next (Siguiente), visualizándose la pantalla que se muestra en la Figura

En este caso, puesto que queremos instalar los componentes cliente en nuestro equipo local, sólo nos permite la selección de esta opción.

5. Si pulsamos el botón Next (Siguiente), visualizaremos la siguiente pantalla que

muestra la Figura

Nuevamente, al estar instalando la versión standard en un equipo con Windows 98, sólo se nos permite seleccionar la opción de crear una nueva instancia de SQL Server.

6. Pulsando el botón Next (Siguiente), obtendremos la pantalla que se muestra en la

Figura, donde se nos insta a poner nuestro nombre y compañía.

SQL SERVER Implementacion Pag.9

Page 10: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

7. Si pulsamos nuevamente el botón Next (Siguiente), podremos visualizar la pantalla que se muestra en la Figura, cuyo cometido es el de mostrarnos las condiciones de uso de la licencia; pulsamos Yes (si) para pasar a la siguiente pantalla que se indica en la Figura

8. Seleccionando la opción de instalación de las herramientas cliente y pulsando el botón Next, accederemos a la pantalla de la Figura, en la que podemos seleccionar los componentes y subcomponentes a instalar.

SQL SERVER Implementacion Pag.10

Page 11: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

9. Dejamos marcados los que vienen por defecto y pulsamos el botón Next (siguiente), para acceder a la página de la Figura, tras la cual el sistema empezará a instalar los componentes seleccionados y, tras unos minutos, mostrará la pantalla final en la cual se nos informa de la conclusión del proceso de instalación, como muestra la Figura

SQL SERVER Implementacion Pag.11

Page 12: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

REQUERIMIENTOS DE SQL SERVER 2000 RELATIVAS AL HARDWARE Después de determinar la versión del sistema operativo y de SQL Server 2000 necesarias, nos queda, exclusivamente, el problema del hardware. SQL Server 2000 debe ejecutarse en un sistema con memoria, velocidad de procesamiento y espacio de disco adecuados. También necesita un plan apropiado de protección del sistema y de la información en el nivel del hardware.

Las pautas clave para elegir el hardware adecuado para SQL Server son las siguientes:

• Memoria: Un mínimo de 256 MB de RAM para la edición Standard y 512 MB de RAM

para la edición Enterprise. Esto supera varías veces el requerimiento de memoria mínimo de 32 MB y 64 MB respectivamente; la razón principal para esta necesidad de memoria extra es el rendimiento. Juntos, los servicios de SQL Server 2000 y los servicios estándar de Windows 2000 utilizan entre 80 y 100 MB de memoria como base. Las conexiones de usuario consumen aproximadamente 24 KB cada una. Las solicitudes de datos y otros procesos de SQL Server también utilizan memoria, y este consumo de memoria se suma a todos los otros procesos y aplicaciones que se estén ejecutando en el servidor.

• Procesador: SQL Server 2000 sólo se ejecuta en máquinas Intel x86 o compatibles;

no funcionará con procesadores Motorola MIPS R4000, PowerPC o DEC Alpha. SQL Server logra unas altas prestaciones en las pruebas comparativas con Intel Pentium III Xeon a 733 MHz y AMD Athlon a 1000 MHz. Ambos procesadores constituyen un buen punto de partida para un sistema SQL Server medio. Puede lograr importantes mejoras en el rendimiento con una gran cantidad de memoria caché interna del procesador. La mayoría de los procesadores Xeon vienen con 512 KB, 1 MB o 2 MB de memoria caché interna del procesador, y 2 MB de memoria caché permiten conseguir un rendimiento general mucho mejor.

• SMP: SQL Server 2000 permite el uso de multiprocesadores simétricos y puede

procesar consultas complejas en paralelo. Las consultas en paralelo son valiosas solamente cuando hay pocos usuarios en el sistema y se están procesando consultas de gran complejidad. En un sistema dedicado que sólo esté ejecutando SQL Server y dé servicio a menos de 100 usuarios simultáneos, un solo procesador debería ser suficiente. Si el servidor presta servicio a más de 100 usuarios o no funciona en un sistema dedicado, puede que convenga agregar procesadores (o utilizar un sistema que permite añadir procesadores adicionales a medida que crezcan sus necesidades).

• Unidades de disco: La capacidad de almacenamiento de datos que necesite dependerá totalmente del número y tamaño de las bases de datos a las que el servidor dé servicio. Necesitará suficiente espacio de disco para almacenar toda la información, más el espacio de trabajo, archivos del sistema, memoria virtual, registros de transacciones y, en el caso de un clúster, el disco de quórum. El rendimiento total de E/S es tan importante como la capacidad de la unidad.

SQL SERVER Implementacion Pag.12

Page 13: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.13

Page 14: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SSEERRVVIICCIIOOSS DDEE SSQQLL SSEERRVVEERR Normalmente, los servicios disponibles son el servidor de bases de datos en sí mismo (MSSQLServer), el coordinador de transacciones distribuidas (MSDTC) y el agente de SQL Server (SQLServerAgent). Basta con iniciar el servicio MSSQLServer para que estén disponibles todas las bases del servidor. Los servicios de SQL Server incluyen:

• MSSQLServer

• SQLServerAgent

• Microsoft Distributed Transaction Coordinator

(MSDTC),

• Microsoft Search.

SQL SERVER Implementacion Pag.14

Page 15: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EL ADMINISTRADOR DE SERVICIOS El Administrador de servicios es una pequeña aplicación que permanece activa en la Bandeja de íconos de la barra de Tareas de Windows de la computadora donde está instalado SQL Server. Haciendo doble clic en este icono aparece la ventana del Administrador de servicios. En ella es posible seleccionar cualquiera de los servicios de SQLServer para ver su estado o para iniciarlo, detenerlo o ponerlo en pausa

Mediante el ícono del Administrador de servicios en la barra de Tareas se activa la ventana del mismo. Una vez abierta, se puede utilizar para ver el estado de los servicios de SQL Server, así como iniciarlos, detenerlos o

ponerlos en pausa. Normalmente, los servicios disponibles son el servidor de bases de datos en sí mismo (MSSQLServer), el coordinador de transacciones distribuidas (MSDTC) y el agente de SQL Server (SQLServerAgent).Basta con iniciar el servicio MSSQLServer para que estén disponibles todas las bases del servidor

SSEERRVVIICCIIOO MMSSSSQQLLSSEERRVVEERR

Este servicio es el motor de la Base de Datos. Este es el componente que procesa todas las declaraciones de Transact-SQL y administra todos los archivos que definen a la Base de Datos dentro del Servidor.

Sus características son:

• Asignar los recursos de la computadora a múltiples usuarios simultáneos. • Previene problemas lógicos, tales como sincronización de peticiones de usuarios

que desean actualizar la misma información al mismo tiempo. • Garantiza la integridad y consistencia de datos.

SQL SERVER Implementacion Pag.15

Page 16: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SSEERRVVIICCIIOO SSQQLLSSEERRVVEERRAAGGEENNTT

El Agente SQL Server admite funciones que permiten programar trabajos para ejecutarse en forma periódica en Microsoft SQL Server 2000 o notificar a los administradores de sistemas acerca de los problemas que han tenido lugar con el servidor. Los componentes del Agente SQL Server que implementan dichas funciones son:

• Trabajos

Objetos definidos que constan de uno o más pasos para llevarse a cabo. Los pasos son las instrucciones Transact-SQL que se van a ejecutar. Por ejemplo, se pueden programar trabajos como crear copias de seguridad para que se ejecuten a horas específicas o a intervalos regulares.

• Alertas

Acciones que se realizan cuando se producen sucesos específicos, como un error concreto o errores de cierta gravedad, o cuando se alcanza el límite de espacio libre disponible definido en una base de datos. Se puede definir que la alerta realice acciones como el envío de mensajes de correo electrónico, mensajes de localización a un operador o la ejecución de un trabajo que resuelva el problema.

• Operadores

Personas identificadas mediante sus cuentas de red o de correo electrónico, quienes pueden resolver los problemas del servidor. Pueden ser destinos de las alertas, a través de correo electrónico, un localizador o comandos de red envío de red.

SSEERRVVIICCIIOO MMIICCRROOSSOOFFTT DDIISSTTRRIIBBUUTTEEDD TTRRAANNSSAACCTTIIOONN CCOOOORRDDIIRRAATTOORR::

• Se encarga de Coordinar la apropiada terminación de las transacciones distribuidas para asegurar que, si todas las actualizaciones de todos los servidores son correctas, queden como definitivas o que, en caso de errores, se eliminen todas.

SQL SERVER Implementacion Pag.16

Page 17: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SSEERRVVIICCIIOO MMIICCRROOSSOOFFTT SSEEAARRCCHH

El Servicio Microsoft Search es un motor de indexación(ordenacion) y de búsqueda de texto que permite al SQL Server realizar consultas de texto eficaces y sofisticadas sobre columnas que almacenan datos basados en caracteres(textos)

Pero antes de utilizar este servicio tenemos que instalarlo. El motor de texto se ejecuta como un servicio denominado Microsoft Search en Windows NT Server, Windows 2000 y Windows 2003 Server y también se puede instalar durante la instalación del SQL Server (No está disponible para la versión SQL Server Personal)

Para saber si este servicio está instalado en nuestro equipo la manera más sencilla es recurrir al ‘Administrador de Servicios’ del SQL Server

Entre las diferencias existentes entre este servicio y las búsquedas que utilizan el operador LIKE podemos citar las siguientes:

1. Se almacenan en el sistema de archivos y no en la base de datos, aunque es la base de datos quien los administra.

2. Sólo se permite un índice de texto por cada tabla. 3. Si se desea agregar datos a los índices de texto hay que realizar un llenado manual o

programado (También se pueden llenar automáticamente en la inserción de datos).

• Son más rápidos y flexibles.

La utilización del servicio Microsoft Search tendrá dos vertientes. En primer lugar tenemos que crear los índices de texto en las tablas deseadas y llenarlos, y en segundo lugar el servicio realizará las búsquedas y devolverá conjuntos de resultados adecuados al criterio de búsqueda.

SQL SERVER Implementacion Pag.17

Page 18: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL Server incluye una variedad de software para administrar y mantener al servidor, encontrando ayuda acerca de temas específicos, diseñando y creando Bases de Datos y buscando información.

SQL SERVER Implementacion Pag.18

Page 19: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EL ENTERPRISE MANNAGER-ADMINISTRADOR CORPORATIVO El ADMINISTRADOR CORPORATIVO es la herramienta más completa para configurar y administrar la instalación de SQL Server. Mientras el Administrador de servicios permite solamente iniciar, hacer una pausa o detener un servicio.

El Administrador corporativo presenta una interfase de usuario dividida en dos paneles: a la izquierda muestra un árbol que contiene todos los elementos que puede manejar el Administrador, y a la derecha contiene el detalle del objeto seleccionado en el frame de la izquierda.

SQL SERVER Implementacion Pag.19

Page 20: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.20

Page 21: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI El Administrador corporativo permite iniciar y detener un servidor, y también capacita para realizar las siguientes tareas:

• Registrar el servidor. • Configurar servidores locales y remotos. • Configurar y administrar una instalación de múltiples servidores. • Ajustar la seguridad de inicio de sesión y añadir usuarios, administradores de sistema

y operadores. • Asignar una contraseña de administrador de sistema (system administrator, sa). • Crear y programar trabajos. • Crear alertas y configurar SQL Server para que se comunique con los

administradores de sistema a través de correo electrónico. • Configurar y administrar bases de datos, tablas, índices, vistas, procedimientos

almacenados, reglas, desencadenadores, definiciones DEFAULT, dispositivos de copia de seguridad y registros de error.

• Acceder al servidor: Una vez que se ha registrado el servidor, se pueden ver y

configurar varias propiedades. Si se tiene un entorno multiservidor, se puede utilizar el Administrador corporativo para administrar y configurar los servidores desde un único lugar.

• Cambiar la contraseña de administrador de sistema predeterminada Al instalar SQL Server, la cuenta de administrador de sistema predeterminada se configura sin contraseña. Se debe especificar una contraseña antes de comenzar a usar SQL Server

SQL SERVER Implementacion Pag.21

Page 22: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

REGISTRAR EL SERVIDOR SQL SERVER Esta tarea es sumamente sencilla.

1. En primer lugar, en el menú Acción, se selecciona la opción Nuevo registro de servidor

SQL Server.... Con esto se iniciará el Asistente para registro de servidor SQL Server 2. Pulse clic en el botón Siguiente de la primera pantalla del asistente aparece otra pantalla

en la cual se debe ingresar el nombre del servidor que se desea registrar.

Suponiendo que vamos a registrar un servidor denominado “ADMINSUELDOS”, en el cuadro de texto que encabeza la lista titulada Servidores disponibles deberíamos ingresar este nombre –si es que no figurpase a la lista de Servidores agregados Si hubiera más de un servidor disponible, se podrían registrar varios de una sola vez, pasándolos a la lista de la derecha antes de cliquear en Siguiente.

a en la lista– y luego pulsar el boton Agregar para que

SQL SERVER Implementacion Pag.22

Page 23: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI Ahora el asistente solicita el modo de autenticación que se utilizará cada vez que se deba conectar al servidor.

La elección en este caso depende de las políticas de seguridad que se hayan establecido en la red. Pero generalmente (incluso en el caso de que el servidor corra localmente) se debe seleccionar la segunda opción, que indica que se utilice Autenticación SQL Server, o sea, que el nombre de usuario y password que se empleen para conectarse a la base se validarán contra la lista de usuarios habilitados por SQL Server (la otra opción determina que se validen contra los usuarios habilitados por Windows NT).

3. Hecho esto, se puede pulsar click en Siguiente y pasar al próximo paso,en el cual se

debe determinar si la conexión se hará automáticamente con un nombre de usuario y password específicos o si éstos se solicitarán cada vez que se haga la conexión.

En caso de que se elija la primera opción, se puede optar por seleccionar el usuario SA–por system administrator, se supone–, sin password, que se define por defecto en las instalaciones nuevas de SQL Server .Lógicamente, si la base de datos requiere un mínimo de seguridad para evitar el acceso de usuarios no autorizados, la primera medida a tomar consiste en crear un nuevo usuario con los mismos derechos que SA, pero con otro nombre y otra password, e inmediatamente eliminar el usuario SA.

4. En el paso siguiente hay que seleccionar un grupo de servidores bajo el cual se colocará

el nuevo registro de servidor. Esta agrupación es útil en empresas que cuentan con gran cantidad de servidores reunidos por sectores (por ejemplo, Producción, Ventas, Administración, etc.). Salvo estos casos, se puede registrar el nuevo servidor bajo el grupo que se crea por defecto; si no aparece ninguno, se puede crear un grupo dándole el nombre que uno desee

SQL SERVER Implementacion Pag.23

Page 24: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 5. En la última pantalla del asistente se muestra la lista de servidores a agregar y el botón

Finalizar. Al cliquear en él, el asistente intentará registrar el o los servidores seleccionados. Puede que se produzca un error durante el proceso de registración. En la mayoría de los casos,el origen de la falla será un problema en la especificación de las direcciones de red y los protocolos a utilizar, y demás parámetros de comunicación. Para solucionarlo, hay que recurrir a la Herramienta de red de cliente y examinar la configuración de la misma con ayuda del administrador de la red. Una vez registrado el servidor, se puede cliquear en el “+” a la izquierda del icono que lo representa en el árbol de la consola para desplegar todos sus elementos. Luego, haciendo clic en el botón “+” a la izquierda de la carpeta Bases de datos aparecen todas las bases definidas dentro de este servidor.

SQL SERVER Implementacion Pag.24

Page 25: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.25

Page 26: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ACCEDER AL SERVIDOR EN EL ADMINISTRADOR CORPORATIVO Una vez que se haya registrado con éxito el servidor utilizando Administrador corporativo, se puede acceder a todas sus propiedades, bases de datos y objetos. Para ver las propiedades y objetos del servidor recién registrado, en primer lugar hay que expandir el grupo de servidores en el panel izquierdo de la ventana de Administrador corporativo. Aparece una lista de todos los servidores del grupo. A continuación expandir el nombre del servidor para que se muestren todas sus propiedades y objetos.

SQL SERVER Implementacion Pag.26

Page 27: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CONFIGURACIÓN DEL SERVIDOR A través del Administrador corporativo se puede realizar la configuración del servidor, redefiniendo los parámetros de memoria, las conexiones de usuario o los bloqueos establecidos.

Cada una de las pestañas de la pantalla anterior tienen las siguientes funciones:

• General: Permite establecer parámetros de arranque, y proporciona información general sobre la instalación

• Memoria: Reservar memoria física o configurar la gestión dinámica de la memoria del servidor.

• Procesador: Gestionar el entorno multiprocesador.(Varios procesadores)

• Seguridad: Autenticación, auditoría, y arranque.

• Conexiones: Gestión de usuarios concurrentes y atributos.

• Parámetros de Servidor: Soporte año 2000, lenguaje, etc.

• Parámetros de Base de datos: Índices, periodo de recuperación y gestión de salvaguardas.

En el siguiente ejemplo definiremos la configuración de memoria para que utilice de forma dinámica entre 8MB y 14MB:

1. Ejecute el Administrador corporativo y seleccione el servidor que desea configurar.

2. En la barra de menú seleccione Herramientas, Propiedades de configuración de SQL SErver.

3. Acceda a la pestaña Memoria. 4. Cambie el valor mínimo del parámetro

Configurar dinámicamente la memoria a 8Mb. Haga clic en Aceptar

La cantidad máxima de memoria que se puede asignar a SQL Server es la cantidad total de RAM disponible en su servidor. Si la cantidad de carga fluctúa, establezca que la memoria se configure dinámicamente.

SQL SERVER Implementacion Pag.27

Page 28: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

INTRODUCCION A LAS BASES DE DATOS

¿QUÉ ES UNA BASE DE DATOS?

En la vida cotidiana se interacciona continuamente con entidades tales como personas, documentos u otros. En una empresa, las entidades están representadas por los operarios, los empleados, los clientes, los proveedores, las facturas. En un hospital nos encontraríamos con los médicos, pacientes, enfermeras, cuadros clínicos, etc. Puesto que en cada caso se debe trabajar con una gran cantidad de datos, surge la necesidad de almacenarlos de manera que nos resulten de fácil acceso en cada momento y, por consiguiente, útiles a nuestras actividades. Si por ejemplo cada día debemos gestionar varias decenas de clientes y facturas, utilizaremos un sistema para memorizar los datos como, por ejemplo, un archivo, más bien antes que recurrir únicamente a la memoria de su computador

Las fichas aparecen reagrupadas en archivos, cada uno de los cuales contiene en general las fichas de un sólo tipo, las de los proveedores o las de los productos. Este sistema recibe el nombre de base de datos, que no es ninguna otra cosa más que una colección de informaciones tales como el catálogo de los ficheros de una biblioteca, un listín telefónico o una enciclopedia. Los programas de gestión de base de datos (Database) están programados para realizar operaciones que nos permiten acceder y, eventualmente, modificar los datos almacenados. Estas operaciones consisten en:Introducción, cancelación, modificación y búsqueda de informacion a partir de los criterios seleccionados por el usuario de orden, clasificación e impresión de los listados, por ejemplo, bajo el formato de etiquetas adhesivas para sobres

SQL SERVER Implementacion Pag.28

Page 29: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ESTRUCTURA DE LAS BASES DE DATOS Una vez se ha instalado Microsoft SQL Server 2000 y se ha diseñado una

distribución de bases de datos y discos, se está preparado para crear una base de datos. SQL Server 2000 hace uso de los métodos mejorados de almacenamiento de datos y administración del espacio que se presentaron en SQL Server 7. Las versiones anteriores del producto utilizaban dispositivos lógicos y segmentos de un tamaño fijo para el almacenamiento de los datos; SQL Server 2000 usa archivos y grupos de archivos que pueden ser configurados para que crezcan o decrezcan automáticamente.

BASES Y TABLAS DEL SISTEMA

Cuando se instala SQL Server se crean cuatro bases de datos del sistema que guardan información del propio sistema, son necesarias para su funcionamiento, y no son utilizables directamente por el usuario:

MASTER La base de datos Master registra toda la información de nivel de sistema para el servidor SQL Server. Esto incluye:

1. Las cuentas de inicio de sesión, 2. parámetros de configuración del servidor, 3. Registrar la existencia de otras bases de datos, etc.

La base de datos Master es absolutamente crítica para los datos, por le que debería mantener siempre una copia de seguridad de la misma. La mayor parte de los procedimientos almacenados del sistema también se guardan en esta base de datos, junto a los mensajes de error.

SQL SERVER Implementacion Pag.29

Page 30: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

MSBD Su uso principal es el almacenamiento de la información que emplea el agente SQL Server, como programación de trabajos, definición de operadores y alertas. La información de la copia de seguridad también se almacena en esta base de datos, y se emplea en la restauración de la base de datos.

MODEL Es una base de datos plantilla, que se emplea cada vez que se crea una nueva base de datos. Los contenidos de la base Model se copian a la nueva base. Si se desea que determinados objetos, permisos, usuarios se creen automáticamente cada vez que se crea una base de datos, pueden incluirse en esta base.

TEMP Algunas veces SQL Server necesita crear tablas temporales internas (o tablas de trabajo) para determinadas operaciones. Entre dichas operaciones se incluye la ordenación, las operaciones multitabla, el tratamiento de cursores, etc. Estas tablas temporales se borran tan pronto como el conjunto de resultados se devuelve a la aplicación cliente, o cuando se cierra el cursor. Almacena todas las tablas y procedimientos almacenados temporales. Esta base de crea de nuevo cada vez que se inicia SQL Server, por lo que no tiene sentido crear copias de seguridad de esta.

Cada base de datos dispone de un conjunto de tablas que la describen. Estas tablas se denominan Catálogo de la base de datos. La base de datos MASTER tiene un conjunto adicional de tablas que describen la instalación de SQL Server. Este conjunto se denomina Catálogo del sistema.

SQL SERVER Implementacion Pag.30

Page 31: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

El catálogo de la base de datos MSDB se usa como área de almacenamiento para:

• La información de configuración utilizada por el Agente SQL Server. Incluye información acerca de trabajos, pasos de trabajo, alertas, operadores, etc.

• Información histórica de copia de seguridad. Se conserva para que el Administrador Corporativo pueda ayudar en la restauración de la base de datos.

Además de tablas, también hay Vistas del Sistema, y Procedimientos almacenados del Sistema.

Un procedimiento almacenado del sistema es un procedimiento almacenado con algunas características especiales. Estos procedimientos, creados cuando SQL Server se instala, se usan para administrar el Servidor. Evitan al administrador tener que acceder directamente a las tablas del sistema

Los siguientes atributos identifican un procedimiento almacenado del sistema:

• El nombre del procedimiento almacenado empieza por sp_. • El procedimiento se almacena en la base de datos Master. • El procedimiento es propiedad del dbo, es decir ha sido creado por el administrador

del sistema.

SQL SERVER Implementacion Pag.31

Page 32: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ARQUITECTURA FÍSICA DE SQL SERVER

La forma en la que "vemos" una base de datos, y la manera en que esta base de datos reside o se estructura en un ordenador o un conjunto de ellos puede ser muy diferente. Algunas de estas diferencias se muestran en el cuadro siguiente:

Un administrador de bases de datos (DBA) ve:

Mientras que SQL Server ve:

Bases de Datos almacenadas físicamente en archivos

Bases de Datos almacenadas físicamente en archivos

Tablas, índices, vistas y otros objetos colocados en grupos de archivos

Páginas asignadas a tablas e índices

Columnas (campos) filas (registros) y almacenadas en tablas

Información almacenada en paginas

Una Base de Datos se crea sobre un conjunto de archivos de base de datos. La forma en la que se almacene va a afectar en gran media al rendimiento (velocidad) de respuesta ante consultas y actualizaciones.

La página es el nivel inferior de entrada/salida de SQL Server, y es la unidad de almacenamiento fundamental. Las páginas contienen los propios datos o bien información acerca de la disposición física de los datos.

• Existen seis tipos de página en SQL Server:

Tipo de Página Almacena Datos Las filas reales (registros) que forman las tablas

de datos. Índice Los elementos de índice y punteros. VarChar e imagen Los datos de VarChar o e imágenes Mapa de Asignación Global

Información acerca de las extensiones empleadas

Página de Espacio Libre

Información acerca del espacio libre en las páginas.

Mapa de Asignación de Índices

Información acerca de las extensiones usadas por una tabla o índice.

Todas las páginas tienen una disposición similar. Todas tienen una cabecera de página de 96 bytes, y un cuerpo que, en consecuencia, ocupa 8.096 bytes. La información almacenada en la cabecera y en el cuerpo depende del tipo de página.

El administrador de una base de datos, con sus privilegios, puede examinar el contenido de una página mediante el comando DBCC PAGE.

SQL SERVER Implementacion Pag.32

Page 33: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

Un archivo de base de datos puede configurarse para crecer automáticamente, si se desea, o se puede limitar en su crecimiento. La unidad más pequeña de entrada/salida y la estructura básica de almacenamiento es una página de 8 KB. Las páginas de una tabla o índice se agrupan de ocho en ocho, en extensiones. Las extensiones pueden compartirse entre tablas, lo que hace que se desperdicie menos espacio de almacenamiento entre tablas pequeñas. Utilizando grupos de archivos, se puede especificar el archivo (o conjunto de archivos) en el que se debería almacenar una tabla o índice.

Un índice agrupado ordena la tabla de acuerdo a la clave del índice. Los índices no agrupados (también llamados árboles binarios) apuntan a las filas de datos.

El tamaño máximo de un único archivo de base de datos es de 32 TB (treinta y dos billones de bytes), y el tamaño máximo de una base de datos es de 1.048.516 TB.

SQL SERVER Implementacion Pag.33

Page 34: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ARCHIVOS DE BASES DE DATOS

Como ya se ha mencionado, una base de datos de SQL Server está compuesta de un conjunto de archivos del sistema operativo. Un archivo de base de datos puede ser un archivo de datos o bien un archivo de registro.

• Los archivos de datos se usan para almacenar datos y objetos como tablas, índices, vistas, desencadenadores y procedimientos almacenados.

• Hay dos tipos de archivos de datos: principales y secundarios.

• Los archivos de registro sirven para almacenar solamente información del registro de transacciones. El espacio de registro se gestiona siempre de manera separada del espacio de datos y nunca puede formar parte de un archivos de datos.

Todas las bases de datos deben crearse con, al menos, un archivos de datos y un archivo de registro, y los archivos no pueden ser utilizados por más de una base de datos, esto es, las bases de datos no pueden compartir archivos. La lista siguiente describe los tres tipos de archivos que puede usar una base de datos:

1. ARCHIVO DE DATOS PRINCIPAL: Un archivo de datos principal contiene toda la

información de inicio para la base de datos y sus tablas y objetos de sistema. Apunta al resto de archivo creados en la base de datos. También puede almacenar tablas y objetos definidos por el usuario, pero no tiene por qué hacerlo. Cada base de datos debe tener exactamente un archivo principal. La extensión de archivo recomendada es mdf.

2. ARCHIVOS DE DATOS SECUNDARIOS: Los archivos de datos secundarios son

opcionales. Pueden contener datos y objetos que no se encuentren en el archivo principal. Una base de datos podría no tener ningún archivo secundario si todos sus datos se encuentran en el archivo principal. Se pueden tener cero, uno, o múltiples archivos secundarios. Algunas bases de datos necesitan archivos secundarios múltiples para poder repartir los datos entre discos separados. La extensión de archivo recomendada es ndf.

3. ARCHIVOS DE REGISTRO DE TRANSACCIONES: Un archivo de registro de

transacciones contiene toda la información de registro de transacciones utilizada para recuperar la base de datos. Toda base de datos debe tener al menos un archivo de registro y puede tener múltiples archivos de registro. La extensión de archivo recomendada es ldf.

Una base de datos simple podría tener un archivo de datos principal, que sea suficientemente grande corno para contener todos los datos y objetos y un archivo de registro de transacciones. Una base de datos más compleja podría tener un archivo de datos principal, cinco archivos de datos secundarios y dos archivos de registro de transacciones. Entonces, ¿cómo podrían estar los datos repartidos entre todos los archivos de datos? La respuesta es que se pueden utilizar grupos de archivos para ordenar los datos.

SQL SERVER Implementacion Pag.34

Page 35: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

GRUPOS DE ARCHIVOS

Los grupos de archivos permiten agrupar archivos con propósitos administrativos y de emplazamiento de datos.

Los grupos de archivos pueden mejorar el rendimiento de la base de datos permitiendo que se cree una base de datos repartida entre múltiples discos o servidores .Se pueden crear tablas e índices en discos específicos mediante el uso de grupos de archivos, permitiendo de esta manera dirigir la E/S de una cierta tabla o índice a los discos de uno o varios servidores.

Hay tres tipos de grupos de archivos. Las características principales de estos grupos de archivos se resumen en la siguiente lista:

1. Grupo de archivos principal: Contiene el archivo de datos principal y todos los

otros archivos que no se hayan puesto en otro grupo de archivos. Las tablas del sistema -que definen usuarios, objetos y permisos para una base de datos- están asignadas al grupo de archivos principal de esa base de datos. SQL Server crea automáticamente las tablas de sistema al crearse una base de datos.

2. Grupos de archivos definidos por el usuario: Incluyen cualquier grupo de

archivos creado por el usuario mientras dura el proceso de creación (o cambio posterior) de una base de datos. Una tabla o un índice puede ser creado para ser colocado en un grupo de archivos definido por el usuario específico.

3. Grupo de archivos predeterminado: Guarda todas las páginas para las tablas e

índices que no tienen un grupo de archivos especificado al crearse. El grupo de archivos predeterminado es, de manera predeterminada, el grupo de archivos principal.

Ejemplo de un Caso de aplicacion

Para mejorar el rendimiento se puede controlar la ubicación de los datos mediante la creación de tablas e índices en grupos de archivos diferentes. Por ejemplo, podría desearse poner una tabla que es utilizada intensivamente en un grupo de archivos de un grupo grande de discos (compuesto de 10 unidades de disco, por ejemplo) y poner otra tabla que se utiliza de una manera menos intensiva en otro grupo de archivos creado en un grupo de discos distinto, más pequeño (compuesto de 4 unidades de disco, por ejemplo). Así, la tabla a la que se accede más frecuentemente estará repartida en el número mayor de discos, permitiendo una E/S de disco con mayor eficiencia

SQL SERVER Implementacion Pag.35

Page 36: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

REGLAS Y RECOMENDACIONES Se debe tener una estrategia bien desarrollada para el uso de archivos y grupos de archivos antes de crear la base de datos. Para ello se deben conocer las siguientes reglas de SQL Server 2000:

1. Los archivos y grupos de archivos no pueden ser usados por más de una base de datos.

2. Un archivo sólo puede ser miembro de un grupo de archivos. 3. Los datos y la información del registro de transacciones no pueden formar parte del

mismo archivo.El espacio de registro siempre se gestiona de manera separada del espacio de datos. Los archivos de registro de transacciones no son nunca parte de un grupo de archivos.

4. Una vez se crea un archivo como parte de una base de datos, no puede moverse a

otro Grupo de archivos. Si se quiere mover un archivo, hay que borrarlo y volverlo a crear.

Además de estas reglas, hay modos específicos de uso de archivos y grupos de archivos que ayudan a diseñar la base de datos: 5. La mayoría de las bases de datos funcionarán correctamente con sólo un archivo de

datos principal y un archivo de registro de transacciones. Este es el diseño recomendado para bases de datos que no hacen un uso particularmente intenso de la E/S. Si se tiene un sistema con una utilización intensiva de la E/S que requiera muchas unidades de disco, probablemente se desee utilizar grupos de archivos definidos por el usuario que repartan los datos entre discos o disposiciones de discos para mejorar el rendimiento de la E/S paralela.

6. Colocar los archivos de registro siempre en discos distintos de los discos que

contengan archivos de datos, tal y como mencionó anteriormente. 7. Si se necesita usar archivos de datos múltiples, utilizar el archivo de datos principal

solamente para las tablas y objetos del sistema, y crear uno o más archivos de datos secundarios para los datos y objetos del usuario.

8. Crear los archivos y grupos de archivos entre tantos discos físicos como haya

disponibles para permitir una mayor cantidad de E/S de disco paralela y maximizar el rendimiento.

9. Poner las tablas diferentes que se usen en una misma consulta en discos físicos

diferentes, si es posible, para permitir E/S paralela de disco mientras el motor de búsqueda encuentra los datos.

SQL SERVER Implementacion Pag.36

Page 37: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACIÓN DE BASES DE DATOS

SQL Server proporciona tres métodos para la creación de una base de datos: el Asistente para creación de bases de datos, el Administrador corporativo de SQL Server y comandos T-SQL que pueden guardarse en un archivo y ejecutarse como un archivo de comandos:

• El asistente coloca todos los archivos de datos que crea en una sola unidad de disco en la carpeta que se le especifique. No se puede poner archivos de datos en posiciones físicas diferentes (ni en unidades diferentes ni en carpetas diferentes) si se utiliza el asistente .Debido a estas limitaciones, el Asistente para creación de bases de datos es la mejor elección si sólo se necesita un archivo de datos principal y un archivo de registro de transacciones en la base de datos. (Por otra parte, siempre se pueden añadir archivos y grupos de archivos a la base de datos posteriormente si se necesitan.)

CREAR UNA BASE DE DATOS UTILIZANDO EL ASISTENTE DE CREACION DE BASES DE DATOS

1. Iniciar el Administrador corporativo de SQL Server y seleccionar el servidor en el que se quiere crear la base de datos. Para seleccionar el servidor hay que comenzar por expandir la carpeta Servidores Microsoft SQL Server. (Pulsar el signo más a la izquierda del nombre de la carpeta.), expandir la carpeta Grupo de SQL Server y a continuación pulsar en el nombre del servidor que quiera usarse.

2. En el menú Herramientas, seleccionar Asistentes,Expandir Base de datos.

SQL SERVER Implementacion Pag.37

Page 38: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

3. Pulsar dos veces en el Asistente para creación de bases de datos para iniciar el Asistente para creación de bases de datos.

4. Pulsar Siguiente para pasar a la pantalla Dar nombre a la base de datos y especificar su ubicación. Escribir el nombre de la base de datos que se quiere crear y las rutas de las posiciones donde se quieren almacenar los archivos de datos y los archivos de registro.

5. Una vez se haya nombrado la base de datos y localizado la ruta en que deben estar los archivos de datos y registro, pulsar Siguiente para continuar.

Se muestra la pantalla Dar nombre a los archivos de base de datos. En esta pantalla

se puede escribir el nombre y tamaño inicial para cada uno de los archivos de base de datos. El archivo principal de la base de datos se crea automáticamente y se le da el nombre de la base de datos como prefijo en su nombre. Se puede aceptar este nombre o escribir uno diferente

5. Pulsar Siguiente para continuar se muestra la pantalla Definir el crecimiento del

archivo de base de datos.

SQL SERVER Implementacion Pag.38

Page 39: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 6. SQL Server puede aumentar automáticamente el tamaño de la base de datos según

se necesite, lo cual ayuda a reducir la sobrecarga de mantenimiento En general, se debería seleccionar la característica de crecimiento automático (Crecimiento automático de archivos de base de datos) porque implica poca sobrecarga de rendimiento de otra forma, se necesitará ajustar manualmente el tamaño de la base de datos según sea necesario.

• Si se pulsa Crecimiento automático de archivos de base de datos se puede

especificar la manera en que el archivo de base de datos deberá aumentar: bien en un número fijo de megabytes o según un porcentaje del tamaño actual. Debe tenerse en cuenta que el archivo de base de datos crecerá sólo según se necesite.

• También se puede restringir la base de datos a un tamaño máximo o dejarla

crecer sin restricciones. Las configuraciones de esta pantalla se aplicarán a cada archivo de base de datos que se creara en el paso 4.

SQL SERVER Implementacion Pag.39

Page 40: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

7. Pulsar Siguiente para continuar.Aparece la pantalla Dar nombre a los archivos del registro de transacciones. Esta pantalla parece igual a la pantalla Dar nombre a los archivos de base de datos, pero esta versión es para el archivo de registro. Ha de tenerse cuidado de no confundir las pantallas.

Tal y como se hizo en el paso 4 para los archivos de base de datos, escribir el nombre y tamaño inicial para el registro de transacciones. (Recuérdese que un registro de transacciones contiene una grabación de todas las modificaciones de la base de datos para posibilitar la recuperación en caso de un fallo de sistema.)

8. Pulsar Siguiente para continuarchivo de registro de transacciones

ar.Se muestra la pantalla Definir el crecimiento del

9. parece la pantalla Completando el Asistente para creación de bases de datos.

Finalizar para terminar la creación de la base de datos Una vez se ha creado la base

A

de datos, aparece un cuadro de mensaje Asistente para creación de bases de datos para informar que la base de datos se ha creado correctamente. Pulsar Aceptar para cerrar este cuadro de mensaje.Aparece otro cuadro de mensaje, que pregunta si se quiere crear un plan de mantenimiento para la nueva base de datos. Se recomienda crear un plan de mantenimiento para asegurarse de que la base de datos tenga un comportamiento correcto, se haga copia de seguridad regularmente por si hay fallo del sistema y sea verificada contra inconsistencias.

SQL SERVER Implementacion Pag.40

Page 41: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREAR UNA BASE DE DATOS CON ADMINISTRADOR CORPORATIVO El Administrador corporativo de SQL Server da la capacidad de crear bases de datos más complejas que las creadas con el Asistente para creación de bases de datos.

1 . Abrir el Administrador corporativo. En el panel izquierdo, expandir el grupo de SQL Server que contenga el nombre del servidor sobre el que se quiere crear la base de datos y expandir el propio nodo del servidor. A continuación pulsar con el botón derecho del ratón en la carpeta Bases de datos y elegir Nueva base de datos.

2. Se abre la ventana Propiedades de la base de datos, con la pestaña General en primer plano, como se ve en la figura siguiente. Escribir el nombre de la base de datos en el cuadro Nombre.

SQL SERVER Implementacion Pag.41

Page 42: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 3. Pulsar la pestaña Archivos de datos. Como se muestra en la figura siguiente, el

Administrador corporativo crea automáticamente el archivo de datos principal, con el nombre de la base de datos como prefijo y PRIMARY como grupo de archivos.

4. Se puede cambiar el nombre, posición y tamaño del archivo principal, pero no se

puede cambiar el grupo de archivos del archivo de datos principal. Escribir el nombre de archivo (nombre lógico), ubicación (nombre físico), tamaño y grupo de archivos de cada archivo que se desee crear. Para cada archivo distinto del archivo principal se puede escribir un nombre de grupo de archivos definido por el usuario, y dicho grupo de archivos será creado

Una vez se hayan definido tantos archivos como se desee, pulsar Aceptar. SQL Server creará la base de datos. Volver al Administrador corporativo y pulsar la carpeta Bases de datos del servidor al que se ha añadido la base de datos. En el panel derecho del Administrador corporativo se verá que SQL Server ha añadido un icono para esa base de datos.

SQL SERVER Implementacion Pag.42

Page 43: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EXAMINAR BASES DE DATOS

Tras crear una base de datos se puede utilizar el Administrador corporativo para explorar y ver objetos en ella. USO DEL ADMINISTRADOR CORPORATIVO

Para ver información de la base de datos utilizando el Administrador corporativo se deben seguir estos pasos:

1. En el Administrador corporativo, expandir (pulsando los signos más) las listas del

grupo SQL Server, el nombre del servidor en que reside la base de datos y la carpeta Bases de datos.

2. Pulsar el nombre de la base de datos que se desee para mostrar los objetos que contienen la base de datos.

BORRAR UNA BASE DE DATOS 1. Pulsar con el botón derecho del ratón en el nombre de la base de datos que se quiere

eliminar 2. A continuación, elegir Eliminar en el menú de contextual. Aparece el cuadro de mensaje

Eliminar base de datos. Pulsar Sí para confirmar el borrado

SQL SERVER Implementacion Pag.43

Page 44: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

TABLAS EN LAS BASES DE DATOS Una vez se haya creado una base de datos (con archivos y grupos de archivos), el siguiente paso es crear los objetos, denominados tablas, que permiten organizar y almacenar los datos. Para crear una tabla considere la siguiente lista da un esquema de estas decisiones de diseño:

1. ¿Qué datos contendrá cada tabla? 2. ¿Qué columnas deben crearse para albergar los datos y cómo deben llamarse? 3. ¿Cuáles son los requisitos del rango de los datos que se permitiría contener a una

columna qué tipo de datos Microsoft SQL Server 2000 debe utilizarse para cada columna?

4. ¿Hay alguna columna a la que se deba permitir contener valores NULL o pueden utilizarse valores predeterminados en su lugar? (Permitir valores NULL provoca mayor carga de procesamiento que la utilización de valores predeterminados.)

5. ¿Qué columnas serán claves principales y cuáles serán claves foraneas? 6. ¿Qué tipo de índices (agrupados o no agrupados) debe tener la tabla y en qué

columna columnas deben definirse dichos índices? 7. ¿Qué usuarios deben tener acceso a qué tablas?

DEFINICIÓN DE TABLA DE UNA BASE DE DATOS Una tabla es un objeto de una base de datos que almacena datos en una colección de filas y columnas. Una tabla se define por las columnas que contiene. Así, los datos pueden organizarse de forma similar a una hoja de cálculo de Excel, como se ilustra en la tabla siguiente, que muestra una tabla de base de datos de ejemplo llamada Productos. Para definir una tabla se debe decidir qué columnas definir y qué tipo de datos, como por ejemplo datos de caracteres o numéricos, se permite que haya en cada columna. También se debe decidir sobre un rango permisible a esos datos -por ejemplo, podría decidirse permitir hasta 30 caracteres o números.

SQL SERVER Implementacion Pag.44

Page 45: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

Tipos de Datos SQl server

SQL SERVER Implementacion Pag.45

Page 46: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.46

Page 47: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACIÓN DE TIPOS DE DATOS DEFINIDOS POR EL USUARIO MEDIANTE EL USO DEL ADMINISTRADOR CORPORATIVO Podría desearse crear tipos de datos para datos como números de teléfono, códigos postales, números de la Seguridad Social y cualesquiera otros datos que se puedan definir claramente y que se vayan a utilizar en más de una tabla de base de datos.

1. En el Administrador corporativo, expandir un grupo SQL Server (pulsando en el signo más al lado de la carpeta) y a continuación expandir un servidor.

2. Expandir la carpeta Bases de datos y luego expandir una base de datos. . 3. Pulsar con el botón derecho del ratón en Tipos de datos definidos por el usuario y

elegir Nuevo tipo de datos definido por el usuario en el menú de contexto. Aparece la ventana Propiedades del tipo de datos definido por el usuario.

3. Escribir el nombre del nuevo tipo de datos en el cuadro de texto Nombre, como se

muestra en la siguiente figura. A continuación se debe especificar el tipo de datos SQL Server y la longitud que de describen el campo definido por el usuario. En el ejemplo de la figura anterior se está definiendo un tipo de datos para la columna Telefono, así que se elegirá el tipo nVarchar, con un valor de longitud predeterminado de 7.

4. Si el tipo de datos debe permitir valores NULL, seleccionar la casilla de verificación Permitir valores NULL.

5. Si el tipo de datos debe utilizar alguna regla

predefinida o valor predeterminado, seleccionarlo en su respectivo cuadro de lista.

6. Pulsar Aceptar para guardar el nuevo tipo de datos.

SQL SERVER Implementacion Pag.47

Page 48: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACION DE UNA TABLA MEDIANTE EL ADMINISTRADOR CORPORATIVO

Ahora que se entienden los elementos básicos de la creación de tablas utilizando SQL Server pasará por un ejemplo de uso del Administrador corporativo para crear una tabla. Sin embargo o, antes de comenzar este proceso es crítico recordar que cuando se diseñen bases de datos propias se deben diseñar todas las tablas de la base de datos y sus relaciones antes de empezar realmente a crearlas.

Para crear una tabla de base de datos utilizando el Administrador corporativo hay que seguir estos pasos:

1. En el Administrador corporativo, desplegar un grupo SQL Server y a continuación expandir un servidor.

2. Desplegar la carpeta Bases de datos para ver las bases de datos disponibles. 3. Expandir la base de datos en que se desee trabajar 4. Pulsar con el botón derecho del ratón la carpeta Tablas y elegir Nueva tabla en el

menú de contexto que aparece. Aparece la ventana Tabla nueva, como se muestra (maximizada) en la figura siguiente.

SQL SERVER Implementacion Pag.48

Page 49: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

5. Definir cada una de las columnas de la tabla de la base de datos -trabajando fila por

fila - escribiendo el nombre en la columna Nombre de columna, eligiendo el tipo de datos del menú desplegable de la columna Tipo de datos, eligiendo la longitud cuando sea aplicable (como para tipos de datos de caracteres) y presionando la tecla Mayúsculas (o la barra espaciadora) o pulsando en la columna Permitir valores nulos si el dato no es obligatorio.

Nombre del Dato

Tipo del Dato

Tamaño del Dato

PÁGINA DE PROPIEDADES DE COLUMNAS DESCRIPCIÓN Muestra la descripción textual de la columna seleccionada. VALOR PREDETERMINADO Muestra el valor predeterminado para la columna seleccionada cuando se inserta en la tabla una fila con un valor nulo para esta columna. PRECISIÓN Muestra el número máximo de dígitos para los valores de la columna seleccionada. ESCALA Muestra el número máximo de dígitos que pueden aparecer a la derecha de la coma decimal para los valores de la columna seleccionada.

SQL SERVER Implementacion Pag.49

Page 50: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI IDENTIDAD Muestra si SQL Server utiliza la columna como una columna de identificador. Los valores posibles son:

• No La columna no se utiliza como una columna de identidad. • Sí La columna se utiliza como una columna de identidad. • Sí (no disponible para duplicación) La columna se utiliza como una columna de

identidad, salvo si un agente de duplicación está insertando datos en la tabla. INICIALIZACIÓN DE IDENTIDAD Muestra el valor de inicialización de una columna de identidad. Esta opción sólo se aplica a las columnas cuya opción Identidad se ha establecido como Sí o Sí (no disponible para duplicación). INCREMENTO DE IDENTIDAD Muestra el valor de incremento de una columna de identidad. Esta opción sólo se aplica a las columnas cuya opción Identidad se ha establecido como Sí o Sí (no disponible para duplicación). ES ROWGUID Muestra si SQL Server utiliza la columna como una columna ROWGUID. Este valor se puede establecer como Sí sólo para una columna de identidad.

ROWGUIDCOL es una propiedad que puede asignar a una columna con valores uniqueidentifier, un tipo de datos de SQL Server 2000 que define un entero de 128 bits garantizado como único. Como tal, el uso de una columna rowguid como clave principal es una alternativa segura al uso de una columna de identidad para garantizar la exclusividad.

FÓRMULA Muestra la fórmula para una columna calculada. INDIZADO Muestra si existe un índice en la columna. Los valores posibles son:

• No No existe un índice en la columna. • Sí (con duplicados) Existe un índice no único en la columna. • Sí (sin duplicados) Existe un índice único en la columna.

SQL SERVER Implementacion Pag.50

Page 51: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREAR UNA CLAVE PRINCIPAL(PRIMARY KEY) En el ejemplo de la tabla Productos, se configurará la columna ID_Producto como la columna clave principal pulsando con el botón derecho del ratón el nombre de columna ID_Producto y eligiendo Establecer clave principal en el menú de contexto. Aparecerá un icono de una llave junto al nombre de la columna.

6. En la parte inferior de la ventana hay una ficha etiquetada «Columnas». Esta ficha

permite cambiar algunos atributos de la columna seleccionada en la parte superior. Por ejemplo, se ha seleccionado la columna IdProducto y a continuación se ha asignado una descripción y un valor predeterminado de 0 para ella en la ficha Columnas de debajo, como se muestra en la figura anterior.

Se pueden crear otras restricciones e índices sobre la tabla pulsando con el botón derecho del ratón sobre cualquier nombre de columna y eligiendo índices y claves, Relaciones, Restricciones CHECK o Propiedades en el menú de contexto, o pulsando en el icono Propiedades de tabla e índice junto al icono Guardar en la barra de herramientas. Cualquiera de estos métodos lleva a la ventana Propiedades, que se muestra en la siguiente figura.

SQL SERVER Implementacion Pag.51

Page 52: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI El nombre de la tabla aparecerá como Tabla1, Tabla2 o algo por el estilo. En este caso se llama Tabla1. Se puede cambiar este nombre, como se enseña en el siguiente paso, al guardar la tabla

GUARDAR LA TABLA Y ASIGNAR NOMBRE

1. Para dar nombre a la nueva tabla hay que pulsar el icono Guardar

2. Aparecerá una venta de diálogo en donde se puede escribir el nombre de la tabla. Escribir el nombre por ejemplo Productos o el nombre que se desee y pulsar Aceptar

3. La tabla que se ha diseñado será creada y su información guardada. Ahora se puede cerrar la ventana Tabla nueva y se verá aparecer al nombre de la tabla en el panel de la derecha de Administrador corporativo.

SQL SERVER Implementacion Pag.52

Page 53: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

USO DE VALORES NULL

Un valor NULL es un valor desconocido al que se le refiere como NULL. La admisión de nulos de una columna se refiere a la posibilidad de la columna de aceptar o rechazar valores NULL.

Un valor NULL en una columna indica normalmente que no se ha introducido nada para una fila particular de datos porque el valor es desconocido, no son ni valores vacíos ni valores 0; sus valores verdaderos son desconocidos Podría necesitarse una columna con nulos si la información que se necesita no es un dato obligatorio por ejemplo el dato numero de celular en una tabla Alumnos no seria obligatorio llenarlo.

LA PROPIEDAD IDENTITY DEFINE UN CAMPO COMO AUTONUMERICO

Al crear una tabla se puede especificar una columna como columna de identidad añadiendo la propiedad IDENTITY a la definición de la columna. Si se crea una columna con la propiedad IDENTITY,

SQL Server genera automáticamente un valor de fila para esa columna, basándose en un valor inicial y un valor de incremento.

Cada vez que se inserte una fila, SQL Server asigna el valor de identidad actual a la columna de identidad de la fila. La siguiente fila que se inserte recibirá un valor identidad que sea un incremento mayor que el valor identidad actual más alto. De esta forma, cada fila que se inserte recibe un valor de identidad único. La propiedad de identidad es útil para columnas en las que cada fila de esa columna deba tener un ID único, como la columna IdProducto.

Por ejemplo, si se especifica IDENTITY (0,10), la primera fila que se inserte tomará un valor de columna de identidad de 0, la segunda fila tomará 10, la tercera fila tomará 20, y así sucesivamente.

SQL SERVER Implementacion Pag.53

Page 54: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

VALORES PREDETERMINADOS Utilice un valor prederminado para asignar un valor por defecto a un campo de una tabla por ejemplo Si tiene un campo llamado sexo su tabla Empleados puede predeteminar su campo Sexo en el valor “Masculino”.

Microsoft SQL Server 2000 permite definir un valor predeterminado para cada columna de tabla. No se puede definir un valor predeterminado para las columnas que tengan el tipo de timestamp o las propiedades IDENTITY o ROWGUIDCOL, ya que dichas columnas deben tener valores únicos.

INSERTAR REGISTROS EN UNA TABLA Puede insertar nuevos registros o examinar los registros de su tabla haciendo lo siguiente:

1. Seleccione la tabla de su base de datos con clic derecho y luego Abrir tabla y luego Devolver todas las filas

SQL SERVER Implementacion Pag.54

Page 55: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

MODIFICAR EL DISEÑO DE UNA TABLA Para modificar el diseño de una tabla como por ejemplo para :

• Añadir o Eliminar campos a una tabla • Cambiar el tipo de datos a los campos • Cambiar el nombre a los campos • Modificar la longitud o tamaño de un campo numerico o texto • Agregar o modificar sus propiedades de campos por ejemplo aplicar un valor

predeterminado

Para ello haga lo siguiente:

1. Seleccione con clic derecho la tabla que desea modificar 2. Elija la opcion Diseñar tabla

SQL SERVER Implementacion Pag.55

Page 56: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACIÓN Y USO DE UN DIAGRAMA DE BD Las tablas también se pueden modificar mediante un diagrama de base de datos en el Administrador corporativo. Para crear un diagrama de base de datos con las tablas de su base de datos

1. Expandir su base de datos en el panel izquierdo del Administrador corporativo y entonces pulsar con el botón derecho del ratón sobre Diagramas. Elegir Nuevo diagrama de base de datos del menú contextual para mostrar la pantalla de bienvenida del Asistente para creación de diagramas de bases de datos.

2. Pulsar Siguiente para visualizar la pantalla Seleccionar tablas para agregar mostrada en la siguiente figura. Hay que seleccionar las tablas que se desean incluir en el

SQL SERVER Implementacion Pag.56

Page 57: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI diagrama de la lista Tablas disponibles y después pulsar Agregar. En este ejemplo hemos agregado las tablas Productos,Categorias y Proveedores

3. Pulsar Siguiente para visualizar la pantalla Completando el Asistente para creación de diagramas de bases de datos. Pulsar Finalizar si las tablas seleccionadas son las correctas o pulsar Atrás y hacer los cambios necesarios.

4. Después de pulsar Finalizar se puede ver el diagrama de base de datos, como se muestra en la figura siguiente.

SQL SERVER Implementacion Pag.57

Page 58: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

PARA CREAR UNA RELACIÓN EN UN DIAGRAMA DE BASE DE DATOS En el diagrama de base de datos, haga clic en el selector de fila de la columna o combinación de columnas de base de datos que desea relacionar con una columna de otra tabla.

1. Con el puntero situado sobre el selector de fila, haga clic y arrástrelo hasta la tabla relacionada.

2. Suelte el botón del mouse. Aparece el cuadro de diálogo Crear relación y se intenta hacer

coincidir las columnas seleccionadas con las columnas de los mismos nombre y tipo de datos de la tabla relacionada.

3. En el cuadro de diálogo Crear relación, confirme que las columnas que desee relacionar se muestran en las listas Tabla de claves principales y Tabla de claves externas.

SQL SERVER Implementacion Pag.58

Page 59: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

COMPROBAR DATOS EXISTENTES

• Seleccione la opción para comprobar los datos existentes al crear una relación si la restricción de FOREIGN KEY se debe aplicar tanto a los datos existentes como a los datos nuevos

• Aparecen varias casillas de verificación en la parte inferior de la ventana. Seleccionar la opción Comprobar datos existentes al crear cuando se quiere que SQL Server compruebe si los datos existentes cumplen la relación de clave externa. Por ejemplo solo sera posible relacionar las tablas Productos y Categorias si en la tabla Productos existen idCategoria que esten registradas en la tabla Categorias .Si hubiera un idcategoria en la tabla Productos desconocida para la tabla Categorias la relacion seria rechazada.

EXIGIR RELACIÓN PARA INSERT Y UPDATE Aplica la restricción a los datos INSERTADOS, ELIMINADOS o ACTUALIZADOS en la tabla de la clave externa. También impide que una fila de la tabla de la clave principal se elimine cuando exista una fila coincidente en la tabla de la clave externa

ACTUALIZAR Y ELIMINAR EN CASCADA LOS CAMPOS RELACIONADOS

Las restricciones de integridad referencial en cascada permiten definir las acciones que Microsoft SQL Server 2000 lleva a cabo cuando un usuario intenta eliminar o actualizar una clave a la que apuntan las claves externas existentes.

Por ejemplo en esta relacion si la propiedad Eliminar en Cascada esta activada hara que si se elimina una Categoria de la tabla Categorias tambien se eliminen todos los productos en la tabla Productos que pertenezcan a dicha categoria

3. Elija Aceptar para crear la relación. 4. Guardar el diagrama con un nombre descriptivo pulsando el botón Guardar e introducien-

do un nombre cuando se solicite.

SQL SERVER Implementacion Pag.59

Page 60: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.60

Page 61: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

USO DE ÍNDICES ¿QUÉ ES UN ÍNDICE? Los índices son una de las herramientas disponibles más potentes para el diseñador de bases de datos. Cuando se utiliza un índice de una tabla de la base de datos para buscar una fila de datos, SQL Server puede determinar rápidamente dónde se almacenan los datos y recuperarlos inmediatamente. Así, los índices de tabla de la base de datos son muy parecidos a los índices de los libros (ambos proporcionan un acceso rápido a grandes cantidades de información).

CLAVES DE LOS ÍNDICES Una clave de índice designa la columna o columnas que se utilizan para generar el índice. La clave del índice es el valor que permite buscar rápidamente la fila que contiene los datos que se están buscando, de igual forma a como una entrada del índice en un libro apunta a un tema concreto del texto. Por ejemplo el campo NombreProducto de la tabla Productos es candidato a ser indice de esta tabla o el campo Apellidos y Nombres de la tabla Empleados

ÍNDICES SIMPLES Un índice simple es un índice que se define en una sola columna de la tabla. Un índice simple puede ser efectivo dependiendo del tipo de datos que se están ordenando, del número de elementos únicos de la columna .En otros casos se necesita un índice compuesto.

• Por ejemplo, si se está indexando una libreta de direcciones con miles de nombres y direcciones, la columna Distrito no es una buena candidata para un índice simple ya que podría haber muchas entradas del mismo Distrito.Sin embargo, al añadir las columnas Dirección y Distrito al índice, por tanto creando un índice compuesto, se puede hacer que cada entrada sea casi única. Este paso puede ser útil si se usan consultas que buscan filas a través de la dirección.

ÍNDICES COMPUESTOS Un índice compuesto es un índice que se define en más de una columna. Se puede acceder a un índice compuesto usando una o más claves de índice. Con SQL Server 2000, un índice puede abarcar hasta 16 columnas y sus columnas clave pueden ser de hasta 900 bytes

SQL SERVER Implementacion Pag.61

Page 62: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ÍNDICES ÚNICOS Un índice único contiene solamente una fila de datos por cada clave del índice (en otras palabras, los valores de la clave del índice no pueden aparecer en el índice más de una vez) SQL Server obliga a que se cumpla la propiedad de unicidad (UNIQUE) de un índice de una columna o combinación de columnas que constituyen la clave del índice. SQL no permite que se inserte en la base de datos un valor de clave duplicado. Si se intenta hacer, se produce un error. SQL Server crea índices únicos cuando se crea o una restricción PRIMARY KEY (clave Primaria) o una restricción UNIQUE en la tabla. Por ejemplo el campo NumeroRuc podria ser un indice UNICO ya que el numero de RUC es unico para cada cliente

ÍNDICES NO ÚNICOS Un índice no único trabaja de la misma forma que un índice único, salvo que puede contener valores duplicados en los valores que los conforman. Todos los valores duplicados se recuperan si cumplen los criterios especificados en la instrucción de consulta Por ejemplo el campo Apellidos en una tabla Clientes podria ser un INDICE NOUNICO ya que muchos clientes podrian tener el mismo apellido y hasta el mismo Nombre

Un índice no único no es tan eficiente como un índice único debido a que necesita procesamiento adicional (operaciones adicionales de entrada/salida) para recuperar los datos requeridos. Pero debido a que algunas aplicaciones necesitan utilizar claves duplicadas, algunas veces es imposible crear un índice único. En estos casos, un índice no único frecuentemente es mejor que no tener ningún índice.

TIPOS DE ÍNDICES Hay dos tipos de índices índices agrupados e índices no agrupados. ÍNDICES AGRUPADOS Como se ha mencionado, un índice agrupado es un índice que almacena los datos de la fila actual de la tabla en sus nodos hoja, de forma ordenada, como se muestra en la figura siguiente.

Orden Fisico

SQL SERVER Implementacion Pag.62

Page 63: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI ESTE SISTEMA OFRECE ALGUNAS VENTAJAS Y ALGUNAS DESVENTAJAS

• Debido a que los datos de un índice agrupado se almacenan ORDENADOS,los datos están disponibles, lo que puede resultar en un número menor de operaciones de entrada/salida. Cualquier reducción de estas operaciones produce un mayor rendimiento, para las operaciones individuales y un mejor rendimiento medio para el sistema.

• Otra ventaja de los índices agrupados es que los datos recuperados están ordenados

según el orden del índice. Por ejemplo, si se crea un índice agrupado a partir de las columnas Direccion, Distrito y Pais y una consulta que selecciona todos los valores para los que Distrito es “San isidro”, la salida resultante está ordenada según Pais y Distrito en el orden en que se haya definido en el índice

• Una desventaja del uso de un índice agrupado es que el acceso a la tabla siempre es

a través del índice, lo que puede provocar una sobrecarga adicional.

• Debido a que los datos reales se almacenan en el índice agrupado, no se puede crear más de un índice agrupado en una tabla

INDICES NO AGRUPADOS

A diferencia de los índices agrupados, los índices no agrupados no contienen los datos reales de la tabla en sus datos. Los indices pueden contener uno o dos tipos de información de ubicación de filas de datos .

CONSEJOS SOBRE INDICES

Orden Logico

• Se deben usar los índices con moderación, es decir, unos pocos índices pueden ser

útiles pero demasiados índices pueden afectar negativamente al rendimiento porque hay que mantenerlos actualizados cada vez que se realizan operación de insercción, actualización y borrado en los datos.

• No poner índices en tablas pequeñas.

• Utilizar el menor número posible de columnas en el índice (índices estrechos), ya que

estos ocupan menos espacio y necesitan menos sobrecarga de mantenimiento.

SQL SERVER Implementacion Pag.63

Page 64: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACIÓN DE ÍNDICES La creación de índices no es difícil. Se pueden crear índices agrupados o no agrupados casi del mismo modo usando los asistentes que suministra el Administrador corporativo

Para crear un índice

1. Abra el Diseñador de tablas para la tabla que desee indizar, haga clic con el botón secundario del mouse en el Diseñador de tablas y elija Índices y claves en el menú contextual.

2. Elija Nuevo. El cuadro Índice seleccionado muestra el nombre asignado por el sistema al índice nuevo.

3. En Nombre de columna seleccione las columnas que desea indizar. Puede seleccionar hasta 16 columnas. seleccione sólo una o dos columnas. Para cada columna seleccionada, puede indicar si el índice ordena los valores en orden ascendente o descendente.

4. Especifique otros valores que desee para el índice y, a continuación, haga clic en Aceptar

SQL SERVER Imp

Define un indice Agrupado

lementacion Pag.64

Page 65: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

IMPORTAR UNA BASE DE DATOS Otra opción consiste en usar el servicio de transformación de datos.Con esta herramienta podrá crear una nueva base en el servidor con la misma estructura y los mismos datos de una base preexistente,que puede provenir de otro servidor SQL Server o de un servidor de otra marca (DB/2, Informix, Oracle o Sybase), de una MDB de Access,de una base de datos Paradox, de un conjunto de archivos DBF,de un archivo de Excel o de archivos de texto plano, entre otras opciones.

El servicio de transformación de datos figura entre las opciones del menú de SQL Server como Importar y exportar datos.

MIGRACIÓN DE UNA BASE DE ACCESS A SQL SERVER

1. Abra el Asistente para transformación de datos, seleccionando la opción Importar y exportar datos del menú de Windows (en el grupo de programas Microsoft SQL Server 7). Se desplegará la primera ventana del Asistente que explica cuál es su función y permite cliquear en Siguiente para pasar al próximo paso

SQL SERVER Implementacion Pag.65

Page 66: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 2. En la segunda ventana del Asistente se debe definir cuál es el origen de los datos para

la transformación. En la lista desplegable titulada Origen seleccionamos la opción Microsoft Access.Al hacer esto, el frame inferior de la ventana cambia para mostrar el conjunto de datos requeridos para acceder a la base de Access;o sea: Nombre de archivo, Nombre de usuario y Contraseña(Figura 19). Dado que vamos a utilizar la base del ejercicio anterior, en el campo Nombre de archivo ingresamos C:\EjerVB\Videoclub\Videoclub.mdb, y dejamos vacíos los campos Nombre de usuario y Contraseña. Hecho esto, estamos en condiciones de cliquear en Siguiente.

3. En el tercer paso se nos solicita el destino de los datos. Dado que la opción por defecto –Microsoft OLE DB Provider for SQL Server– es la que usaremos, vamos a ingresar directamente la información solicitada en la parte inferior de la ventana; los consabidos nombre de servidor y datos de autenticación. La diferencia con las ocasiones anteriores en las que establecimos una conexión con el servidor consiste en que esta vez le pediremos que nos conecte con una base nueva, no con una preexistente. Para hacer esto, en la lista desplegable titulada Base de datos seleccionamos la opción <nuevo>

SQL SERVER Implementacion Pag.66

Page 67: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

4. Inmediatamente se abrirá una ventana titulada Crear base de datos En ella –al igual

Si bien estos tamaños son flexibles (es decir, SQL Server expandirá los archivos a

Para el ejemplo que nos ocupa, ingrese NeptunoBD como nombre para la nueva base, y

s tablas íntegras

• En este punto, el Asistente muestra las tablas existentes en la base de origen, y brinda la opción de seleccionar aquellas que se desee migrar. Selecciónelas todas. Verá que al hacerlo, se completan las otras dos columnas de la grilla: Tabla de destino y Transformar.

r izquierda, indica que la tabla se creará durante la migración

que en las opciones vistas antes para crear bases en el servidor– se solicita el nombre para la nueva base y los tamaños iniciales de los archivos de datos y de registro.

medida que le vayan quedando chicos), es bueno hacer una estimación del tamaño requerido en función de la suma de los tamaños de cada tabla, calculando el tamaño de registro y multiplicándolo por el número de registros en la tabla. A eso hay que agregarle un espacio prudencial para almacenar índices.

asígnele un espacio de 5 MB para el archivo de datos y 1 MB para el archivo de registro. Es habitual asignar al archivo de registro (que contiene las transacciones en curso hasta el momento en que se les hace un commit) un 20 por ciento del tamaño establecido para los datos. El paso siguiente consiste, simplemente, en decidir si se van a copiar lade la base de datos de origen o si se utilizarán instrucciones SQL para definir los conjuntos de datos a migrar .En el primer caso, seleccione Copiar las tablas de la

base de datos de origen.

En la primera, el Asistente coloca nombres de tabla que coinciden con los de la base de origen. También muestra un ícono para cada tabla, que, si tiene una estrella en la esquina superio

SQL SERVER Implementacion Pag.67

Page 68: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

• suspensivos para cada tabla de modificar la . Por ejemplo,

puede deseleccionar ciertas columnas de ciertas tablas para que no se incluyan en la

• El asistentequé hacer con la operación de migray “Guardarinmediatamente o programarla en un paquete DTS (data transformation service, servicio de transformación de datos) para una ejecución posterior. En el segundo

En la columna Transformar aparecen botones con puntos seleccionada. Si presiona cualquiera de ellos, tendrá la oportunidad forma en que el asistente migrará los datos de la tabla correspondiente

migración, o hacer que se aplique una conversión a un tipo de datos diferente para alguna columna. Pero en este ejemplo dejaremos las opciones de transformación tal como las infiere el Asistente.

presenta, en esta anteúltima pantalla, una serie de opciones referidas a ción. Se muestran dos frames, titulados “Cuando”

”. En el primero se ofrece la opción de ejecutar la migración

SQL SERVER Implementacion Pag.68

Page 69: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI frame se da la opción de crear el paquete DTS, independientemente de que la ejecución sea inmediata o diferida En este caso, optaremos por ejecutar la operación inmediatamente.

SQL SERVER Implementacion Pag.69

Page 70: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

COPIAS DE SEGURIDAD DE BASES DE DATOS

• Al terminar la copia de seguridad de una base de datos, se ha creado un duplicado de los datos de la base de datos. Esta es una operación única, programada normalmente a intervalos regulares. Las copias de seguridad de bases de datos son independientes.

• Es posible volver a crear toda la base de datos a partir de una copia de seguridad de

base de datos en un solo paso; para ello, restaure la base de datos. El proceso de restauración sobrescribe la base de datos existente o crea la base de datos si no existe. El estado de la base de datos restaurada será el mismo que el de la base de datos en el momento en que terminó la copia de seguridad,

CREAR UNA COPIA DE SEGURIDAD Para crear una copia de seguridad de base de datos :

1. Expanda un grupo de servidores y, a continuación, un servidor.

2. Expanda Bases de datos, haga clic con el botón secundario del mouse en la base de datos, seleccione Todas las tareas y, a continuación, haga clic en Copia de seguridad de la base de datos.

3. En el cuadro Nombre, escriba el nombre del conjunto de copias de seguridad. Opcionalmente, en Descripción, escriba una descripción del conjunto de copias de seguridad.

4. En Copia de seguridad, haga clic en Base de datos: completa.

5. En Destino, haga clic en Cinta o Disco y especifique el destino de la copia de seguridad.

SQL SERVER Implementacion Pag.70

Page 71: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

Si no aparece ningún destino de copia de seguridad, haga clic en Agregar para agregar un destino existente o crear uno nuevo.

6. En Sobrescribir, realice una de las siguientes operaciones:

• Haga clic en Anexar al medio para agregar la copia de seguridad a cualquier copia de seguridad existente en el dispositivo.

• Haga clic en Sobrescribir medio existente para sobrescribir las copias de seguridad existentes en el dispositivo.

7. Opcionalmente, seleccione la casilla de verificación Programar para programar la

operación de copia de seguridad destinada a una ejecución posterior o periódica. 8. Finalmente pulse el boton Aceptar

SQL SERVER Implementacion Pag.71

Page 72: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CÓMO RESTAURAR UNA COPIA DE SEGURIDAD DE UNA BASE DE DATOS

1. Expanda un grupo de servidores y, a continuación, un servidor.

2. Expanda Bases de datos, haga clic con el botón secundario del mouse en la base de datos, seleccione Todas las tareas y, a continuación, haga clic en Restaurar base de datos.

3. En el cuadro Restaurar como base de datos, escriba o seleccione el nombre de la base de datos que se desea restaurar, si no es el nombre predeterminado. Para restaurar la base de datos con un nombre nuevo, escriba el nuevo nombre de la base de datos.

4. Haga clic en Base de datos.

5. En la lista Primera copia que restaurar, haga clic en el conjunto de copias de seguridad que desea restaurar.

6. En la lista Restaurar, haga clic en la copia de seguridad de base de datos que desea restaurar

SQL SERVER Implementacion Pag.72

Page 73: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

7. Para Finalizar pulse el boton Aceptar

SQL SERVER Implementacion Pag.73

Page 74: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LA CAPACIDAD DE SQL SERVER

1. El tamaño máximo de un único archivo de base de datos es de 32 TB (treinta y dos billones de bytes), y el tamaño máximo de una base de datos es de 1.048.516 TB.

2. SQL Server puede tener hasta dos mil millones de tablas por cada base de datos

3. Cada Tabla puede tener hasta 1.024 columnas

4. El número de filas y el tamaño total de la tabla está limitado solamente por el espacio

de almacenamiento disponible.

5. El número máximo de bytes por fila es de 8.060. Si se crean tablas con columnas

varchar, nvarchar o varbinary en las que el ancho total definido excede de 8.060 bytes, se crea la tabla, pero aparece un mensaje de advertencia. Al intentar insertar

más de 8.060 bytes en tal fila o actualizar una fila de tal forma que su tamaño total de

fila exceda de 8.060, se genera un mensaje de error y no se puede realizar la

instrucción

6. Cada tabla puede contener un máximo de 249 índices no agrupados y 1 índice

agrupado. Éstos incluyen los índices generados para admitir las restricciones

PRIMARY KEY y UNIQUE definidas para la tabla.

SQL SERVER Implementacion Pag.74

Page 75: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

Transact-SQL es fundamental para trabajar con Microsoft SQL Server Todas las aplicaciones que se comunican con SQL Server lo hacen enviando instrucciones Transact-SQL al servidor, independientemente de la interfaz de usuario de la aplicación.

En este capítulo se introducirán conceptos básicos del lenguaje de consulta estructurado (SQL, Structured Query Language) y TransacT-SQL (T-SQL) y se mostrarán las diferencias entre los dos lenguajes. Este capitulo explica el lenguaje de definición de datos (DDL, Data Definition Language) y el lenguaje de tratamiento de datos (DML, Data Manipulation Language) y se incluyen ejemplos de cada uno.

SQL SERVER Implementacion Pag.75

Page 76: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EL LENGUAJE SQL SQL es un lenguaje de consulta y programación de bases de datos utilizado para acceder a los datos y para consultar, actualizar y gestionar sistemas de bases de datos relacionales

El lenguaje SQL contiene instrucciones que se ajustan las dos principales categorías de programación: DDL y DML. Se verán estas categorías de lenguaje en las siguientes secciones.

DDL

DDL se utiliza para definir y administrar objetos bases de datos tales como bases de datos, tablas y vistas. Las instrucciones DDL usualmente incluyen instrucciones CREATE, ALTER y DROP para cada objeto. Por ejemplo, las instrucciones CREATE TABLE, ALTER TABLE y DROP TABLE se utilizan para crear una tabla, modificar sus propiedades (agregar o borrar columnas, por ejemplo) y eliminar una tabla, respectivamente. CREATE TABLE PRODUCTOS(IDPRODUCTO INT NOT NULL PRIMARY KEY , NOMBREPRODUCTO VARCHAR(15))

DML

DML se utiliza para manipular los datos contenidos en los objetos base de datos. Para ello se utilizan instrucciones tales como INSERT, SELECT, UPDATE y DELETE. Estas instrucciones permiten seleccionar filas de datos mediante la realización de consultas, insertar nuevas filas de datos, modificar las filas de datos existentes y borrar filas de datos no deseadas, respectivamente.

DELETE PRODUCTOS WHERE NOMBREPRODUCTO LIKE “A%”

T-SQL

SQL es una mejora del lenguaje de programación SQL estándar. Es el lenguaje principal utilizado para comunicaciones entre aplicaciones y SQL Server. T-SQL proporciona las posibilidades DDL y DML de SQL estándar además de funciones extendidas, procedimientos almacenados del sistema y con construcciones de programación (tales como IF y WHILE) con el fin de permitir mayor flexibilidad en la programación. Las capacidades de T-SQL continúan creciendo con las versiones nuevas de SQL Server

CREATE PROCEDURE LISTAR PRODUCTOS @ORDEN AS IF @ORDEN=’ASC’ BEGIN SELECT * FROM PRODUCTOS ORDER BY NOMBREPRODUCTO END

SQL SERVER Implementacion Pag.76

Page 77: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

COMANDOS SQL

SQL SERVER Implementacion Pag.77

Page 78: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.78

Page 79: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.79

Page 80: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.80

Page 81: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EL ANALIZADOR DE CONSULTAS El Analizador de consultas es una aplicacion desde la cual podrá ejecutar directamente cualquier instrucción o secuencia de instrucciones SQL contra una base de datos existente en cualquier servidor disponible. Al entrar en el Analizador, se abre una pantalla previa que brindala posibilidad de establecer una conexión con un servidor (Se puede utilizar el Analizador de consultas SQL para mostrar una herramienta basada en una interfaz gráfica de usuario donde se pueden ejecutar instrucciones T-SQL. Para ejecutar el Analizador de consultas SQL hay que seguir los siguientes pasos:

1. En el Menu Inicio elija Programas y luego Elija Microsoft SQL SERVER y Analizador de Consultas

2. Seleccione el servidor y luego ingrese el nombre de usuario y contraseña para este Ejemplo ingrese en el nombre de usuario sa y deje la contraseña en blanco

3. A continuacion pulse el boton Aceptar

SQL SERVER Implementacion Pag.81

Page 82: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI Una vez conectado, el Analizador de consultas despliega su ventana principal.

SQL SERVER Implementacion Pag.82

Page 83: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREAR UNA BASE DE DATOS UTILIZANDO EL ANALIZADOR DE CONSULTAS EL proceso es muy sencillo, como ejemplo creamos una base de datos llamada Ventas con un tamaño de 10 MB y limitada a 50 MB y un incremento de 5 MB. El registro de transacciones lo creamos con un tamaño de 5MB y limitado a 25 y un incremento de la base de datos de 5 MB COMANDO CREATE DATABASE

1. En el analizador de consultas en el panel de comandos escriba lo siguiente luego seleccione el texto y pulse F5 para Ejecutar las instrucciones /*Abrir la base de datos Master*/ USE master

2. Ahora crearemos la base de Datos Ventas /*Crear la base de datos con el comando Create database*/ CREATE DATABASE VENTAS ON /*Generando el archivo de datos*/ ( NAME = ventas_data, FILENAME = 'c:\program files\microsoft sql server\mssql\data\ventas_data.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) /*Generando el archivo de registro*/ LOG ON ( NAME = Pruebas_log', FILENAME = 'c:\program files\microsoft sql server\mssql\data\ventas_log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) -----------------------------------------------------------------------------------

3. Seleccione todas las instrucciones y pulse F5

ABRIR SU BASE DE DATOS

1. Escribe el comando siguiente : USE VENTAS

2. Seleccione el comando y pulse F5

SQL SERVER Implementacion Pag.83

Page 84: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

Sintaxis del comando Create Database: NAME = Nombre_del_archivo_lógico, FILENAME = Nombre_del_archivo_en_el_sistema (path completo) SIZE = TAMAÑO (inicial) MAXSIZE = (tamaño_máximo | UNLIMITED) (Tamaño máximo que puede tener la base de datos, UNLIMITED = tamaño ilimitado) FILEGROWTH = Incremento del archivo (crecimiento en MB)

MODIFICAR UNA BASE DE DATOS CREADA

COMANDO ALTER DATABASE

Añade o elimina archivos o grupos de archivos de una base de datos. Se puede usar también para modificar las propiedades de archivos y grupos de archivos CREATE DATABASE BDEMPRESA ON ( NAME = Emp_dat1, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\Emp_dat1.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) GO ALTER DATABASE BDEMPRESA ADD FILE ( NAME = Emp_dat2, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\Emp_dat2.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) GO

AÑADIR UN GRUPO DE ARCHIVOS A LA BASE DE DATOS

USE master GO ALTER DATABASE VENTAS ADD FILEGROUP GP_VENTAS GO ALTER DATABASE VENTAS ADD FILE ( NAME = Ventas_dat3, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\Ventas_dat3.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB),

SQL SERVER Implementacion Pag.84

Page 85: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI ( NAME =ventas_dat4, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\Ventas_dat4.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB) TO FILEGROUP GP_VENTAS ALTER DATABASE BDEMPRESA MODIFY FILEGROUP GPVENTAS DEFAULT

-----------------------------------------------------------------------------------------------------------------------------

AÑADIR ARCHIVOS LOG A LA BASE DE DATOS

USE master GO ALTER DATABASE BDEMPRESA ADD LOG FILE ( NAME = Emp_log2, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Emp_log2.ldf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB), ( NAME =Fact_log3, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Emp_log3.ldf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB) GO

ELIMINAR FICHEROS DE LA BASE DE DATOS

USE master GO ALTER DATABASE DBEMPRESA REMOVE FILE Emp_dat4 GO

MODIFICAR UN ARCHIVO DE DATOS USE master GO ALTER DATABASE BDEMPRESA MODIFY FILE (NAME = Emp_dat3, SIZE = 20MB) GO

CONVERTIR UN GRUPO DE ARCHIVOS EN GRUPO

POR DEFECTO

SQL SERVER Implementacion Pag.85

Page 86: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

USE master GO ALTER DATABASE BDEMPRESA MODIFY FILEGROUP GPVENTAS DEFAULT GO

CAMBIAR EL NOMBRE A UNA BASE DE DATOS El comando Alter Database no permite cambiar el nombre a una base de datos en su lugar utilice el procedimiento almacenado SP_RENAMEDB Este ejemplo cambia el nombre de la base de datos BDEMPRESA por BDNEPTUNO EXEC sp_renamedb 'BDEMPRESA', 'BDNEPTUNO'

CAMBIAR UBICACIÓN DE BASES DE DATOS SQL SERVER DEL SERVIDOR

1. Mover Bases de Datos de Usuarios 2. Mover master

Cada base de datos de SQL Server tiene al menos dos archivos:

• El archivo de datos que tiene extensión mdf. • El archivo de transacciones que tiene extensión ldf.

Estos dos archivos se encuentran en "C:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data". Si por algún motivo necesitamos cambiar la ubicación de estos archivos a otra carpeta o a otro disco tenemos que realizar un proceso sencillo pero laborioso. Vamos a ver paso a paso como realizar este cambio de ubicación de los ficheros de las bases de datos.

1. Para mover la ubicación de los archivos de nuestras bases de datos vamos a suponer que hemos realizado una instalación por defecto del SQL Server, es decir, las bases de datos se encuentran en la carpeta "C:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data", y queremos llevarlas a un disco distinto, por ejemplo a "D:\"

2. El primer paso es realizar una copia de seguridad de TODOS los datos y TODAS las bases de datos del servidor (master incluida por supuesto) puesto que estos cambios entrañan peligro para el propio servidor.

3. Ahora veamos como mover todas las bases de datos una por una.

MOVER BASES DE DATOS DE USUARIOS

4. A continuación vamos a mover las bases de datos de usuarios. Si tenemos una base de datos llamada "Pruebas" en el analizador de consultas ejecutamos el siguiente script para separar la base de datos del servidor

SQL SERVER Implementacion Pag.86

Page 87: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI USE MASTER GO SP_DETACH_DB 'PRUEBAS' GO

5. Lo siguiente es mover los archivos de esta base de datos (pruebas.mdf y pruebas.ldf) a la carpeta destino ("D:\") Y por último volvemos a adjuntar la base de datos en su ubicación actual.

USE MASTER GO SP_ATTACH_DB 'PRUEBAS','D:\PRUEBAS.MDF','D:\PRUEBAS.LDF' GO

Y para ver que todo ha ido bien.

SP_HELPDB 'PRUEBAS' • Ahora hay que repetir este procedimiento para todas las bases de datos de usuario

que tengamos MOVER MASTER

1. Abrimos el Administrador Corporativo 2. Pulsamos con el botón derecho en el servidor y sacamos la ventana de propiedades 3. Pulsamos clic en parámetros de inicio y vemos que hay las siguientes entradas ------------------------------------------------------------------------------------------------------------------------ 4. -dC:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data\master.mdf 5. -eC:\Archivos de Progama\Microsoft SQL Server\MSSQL\log\ErrorLog 6. -lC:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data\mastlog.ldf ------------------------------------------------------------------------------------------------------------------------ 7. Y podemos cambiar los relacionados con master por ------------------------------------------------------------------------------------------------------------------------ 8. -dD:\master.mdf 9. -lD:\mastlog.ldf ------------------------------------------------------------------------------------------------------------------------ 10. También podemos cambiar de la misma manera la ubicación de los registros de error 11. Detenemos el SQL Server 12. Copiamos "master.mdf" y "masterlog.ldf" a la nueva localización 13. Reiniciamos el SQL Server

Con esto debería estar todo listo y nuestro servidor debería funcionar perfectamente pero ahora con todos los ficheros de bases de datos en "D:\" como queríamos. Sólo recordar una cosa más. Estos cambios son una operación de alto riesgo y tener copias de seguridad de TODO antes de empezar es imprescindible.

SQL SERVER Implementacion Pag.87

Page 88: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACIÓN DE TABLAS Para crear una tabla en su base de datos utilice el comando CREATE TABLE

COMANDO CREATE TABLE CREATE TABLE Empleados (Nombre VARCHAR (25), Apellidos VARCHAR (50))

(Crea una nueva tabla llamada Empleados con dos campos, uno llamado Nombre de tipo VarChar y longitud 25 y otro llamado apellidos con longitud 50). CREATE TABLE

Empleados ( Nombre VARCHAR (10), Apellidos VARCHAR, FechaNacimiento DATETIME )

CONSTRAINT Índicegeneral UNIQUE ( Nombre, Apellidos, FechaNacimiento) Resultado:

Tabla Empleados Nombre Apellidos FechaNacimiento

(Crea una nueva tabla llamada Empleados con un campo Nombre de tipo texto (Varchar) y longitud 10, otro con llamado Apellidos de tipo texto (Varchar) y longitud predeterminada (50) y uno más llamado FechaNacimiento de tipo Fecha/Hora.(Datetime) También crea un índice único - no permite valores repetidos - formado por los tres campos.)

SQL SERVER Implementacion Pag.88

Page 89: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI EJEMPLOS DEL COMANDO CREATE TABLE GENERAR UNA TABLA CON UN CAMPO AUTONUMERICO • El valor IDENTITY define que el campo Idalumno es autonumerico y empieza en el valor

100 y se incrementara de 1 en 1 • PRIMARY KEY que el campo IDALUMNO es Clave Primaria de la tabla • NOT NULL El ingreso de este dato es obligatorio

CREATE TABLE ALUMNOS (IDALUMNO INT NOT NULL IDENTITY(100,1) PRIMARY KEY, NOMBRE VARCHAR(40) NOT NULL, APELLIDOS VARCHAR(40) NOT NULL, SEXO BIT NOT NULL, FECHANACIMIENTO DATETIME NOT NULL)

GENERAR UN CAMPO AUTOGENERADO • Se puede generar un campo que sera el producto de una operación entre otros campos

Por ejemplo PROMEDIO es el producto del calculo de la suma de N1+N2+N3

CREATE TABLE NOTAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, N1 DECIMAL NOT NULL, N2 DECIMAL NOT NULL, N3 DECIMAL NOT NULL, PROMEDIO AS N1+N2+N3, APROBADO BIT NOT NULL)

GENERAR UN VALOR PREDETERMINADO PARA UN CAMPO

CREATE TABLE CURSOS (IDCURSO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NOMBRECURSO VARCHAR(35) NOT NULL, COSTO MONEY DEFAULT(200))

GENERAR UNA REGLA PARA UN CAMPO DE UNA TABLA

CREATE TABLE MATRICULAS (IDMATRICULA INT NOT NULL PRIMARY KEY , FECHAMATRICULA DATETIME NOT NULL, PAGO MONEY CHECK (PAGO>100))

SQL SERVER Implementacion Pag.89

Page 90: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

UTILIZAR EL TIPO DE DATOS UNIQUEIDENTIFIER EN UNA COLUMNA Este ejemplo crea una tabla con una columna UNIQUEIDENTIFIER. Utiliza una restricción PRIMARY KEY para impedir que los usuarios inserten valores duplicados y utiliza la función NEWID() de la restricción DEFAULT para proporcionar valores para las nuevas filas.

CREATE TABLE PROFESORES (IDPROFESOR UNIQUEIDENTIFIER CONSTRAINT Guid_Default DEFAULT NEWID(), NOMBRES VARCHAR(60), CONSTRAINT Guid_PK PRIMARY KEY (IDPROFESOR)

CREAR UNA TABLA CON UNA CLAVE PRIMARIA COMPUESTA

CREATE TABLE [DETALLES DE PEDIDOS] (IDPEDIDO INT ,IDPRODUCTO INT ,CANTIDAD INT ,PRECIOUNIDAD MONEY PRIMARY KEY(IDPEDIDO,IDPRODUCTO))

CREAR UNA TABLA EN UN GRUPO DE ARCHIVOS Este ejemplo crea la tabla NOTAS en un grupo GP_EVALUACIONES de la base de datos BDCOLEGIO CREADA ANTERIORMENTE

CREATE TABLE NOTAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, N1 DECIMAL NOT NULL, N2 DECIMAL NOT NULL, N3 DECIMAL NOT NULL, PROMEDIO AS N1+N2+N3, APROBADO BIT NOT NULL) ON GP_EVALUACIONES

Este ejemplo crea una tabla MATRICULAS y lo añade al grupo existente GP_MATRICULAS

CREATE TABLE MATRICULAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, FECHAMATRICULA DATETIME NOT NULL, PROMEDIO AS N1+N2+N3) ON GP_MATRICULAS

SQL SERVER Implementacion Pag.90

Page 91: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

COMO CREAR TABLAS ESTABLECIENDO RELACION 1. Vamos a desarrollar el siguiente ejemplo de relacion de tablas para ello usaremos el

Analizador de Consultas.El objetivo sera relacionar las tablas CATEGORIAS,PROVEEDORES Y PRODUCTOS aplicando la ACTUALIZACION Y ELIMINACION en CASCADA.

Este ejemplo asume que las tablas CATEGORIAS Y PROVEEDORES ya existen ------------------------------------------------------------------------------------------------------------------

CREATE TABLE PRODUCTOS (IDPRODUCTO INT IDENTITY NOT NULL PRIMARY KEY,NOMBREPRODUCTO VARCHAR(50), IDPROVEEDOR INT REFERENCES PROVEEDORES(IDPROVEEDOR) ON UPDATE CASCADE ON DELETE CASCADE, IDCATEGORIA INT REFERENCES CATEGORIAS(IDCATEGORÍA) ON UPDATE CASCADE ON DELETE CASCADE, CANTIDADPORUNIDAD INT,PRECIOUNIDAD MONEY,UNIDADESENEXISTENCIA INT, UNIDADESENPEDIDO INT,NIVELNUEVOPEDIDO TINYNT,SUSPENDIDO BIT)

------------------------------------------------------------------------------------------------------------------------- 2. En este segundo ejemplo se crea una tabla PEDIDOS la cual se relaciona con las tablas

CLIENTES y EMPLEADOS que ya existen

CREATE TABLE PEDIDOS (IDPEDIDO INT IDENTITY NOT NULL PRIMARY KEY,FECHAPEDIDO, IDCLIENTE INT REFERENCES CLIENTES(IDCLIENTE) ON UPDATE CASCADE ON DELETE CASCADE, IDEMPLEADO INT REFERENCES EMPLEADOS(IDEMPLEADO) ON UPDATE CASCADE ON DELETE CASCADE, FECHAENVIO DATETIME,CARGO MONEY,UNIDADESENEXISTENCIA INT, UNIDADESENPEDIDO INT,NIVELNUEVOPEDIDO TINYNT,SUSPENDIDO BIT)

SQL SERVER Implementacion Pag.91

Page 92: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI PARA COMPROBAR LA ESTRUCTURA DE LA NUEVA TABLA UTILICE EL PROCEDIMIENTO ALMACENADO SP_HELP

EJEMPLO : /*CURSOS es el nombrede la tabla*/ SP_HELP CURSOS

EL COMANDO DROP TABLE Elimina una tabla y todos sus datos, índices, disparadores, restricciones y permisos especificados para esa tabla. Cualquier vista o procedimiento almacenado que referencia dicha tabla debe ser explícitamente borrado, la instrucciñón DROP TABLE no lo hace.

DROP TABLE MATRICULAS /* Elimina La Tabla Matriculas */

SQL SERVER Implementacion Pag.92

Page 93: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

MODIFICAR TABLAS DE LA BASE DE DATOS Entendemos por modificar una tabla, cambiar su estructura, es decir, añadir atributos, borrarlos, o cambiar la definición. La sentencia que permite modificar una tabla es la que muestra

LA SENTENCIA ALTER TABLE Su sintaxis es la descrita en el Código fuente ALTER TABLE tabla ADD atrib tipo NULL Ejemplos Añadir una nueva columna a una tabla

CREATE TABLE CONTACTOS ( TIPO AS VARCHAR(20),DIRECCION VARCHAR(50)) GO ALTER TABLE CONTACTOS ADD NOMBRECONTACTO VARCHAR(20) NOT NULL GO

Eliminar una columna de una tabla

ALTER TABLE CONTACTOS DROP COLUMN DIRECCION Añadir una nueva columna con una restricción

ALTER TABLE CONTACTOS ADD EDAD TINYINT NULL CONSTRAINT ED_unique UNIQUE

Añadir una restricción no validada a una tabla ALTER TABLE CONTACTOS WITH NOCHECK ADD CONSTRAINT Edad_check CHECK (EDAD > 1) GO

Añadir varias columnas con restricciones

ALTER TABLE CONTACTOS ADD /* Añadir una columna como clave primaria */ IDCONTACTO INT IDENTITY CONSTRAINT Idcontacto_pk PRIMARY KEY, /* Añadir una columna con una restricción de comprobacion */ CIUDAD VARCHAR(16) NULL CONSTRAINT column_d_chk CHECK (column_d IS NULL OR column_d LIKE "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" OR column_d LIKE "([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"), /* Añadir una columna con valor por defecto */ column_e DECIMAL(3,3) CONSTRAINT column_e_default DEFAULT .081 GO

Añadir una columna con valor por defecto y NULL

ALTER TABLE VIDEOS

SQL SERVER Implementacion Pag.93

Page 94: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI ADD FECHAESTRENO smalldatetime NULL CONSTRAINT FECHA_C1 DEFAULT getdate() WITH VALUES

Deshabilitar y habilitar una restricción

CREATE TABLE empleado (id INT NOT NULL, nombre VARCHAR(10) NOT NULL, salario MONEY NOT NULL CONSTRAINT salario CHECK (salario < 100000) ) -- Inserciones validas INSERT INTO empleado VALUES (1,"Joe Brown",65000) INSERT INTO empleado VALUES (2,"Mary Smith",75000) -- Inserción que viola la restricción INSERT INTO empleado VALUES (3,"Pat Jones",105000) -- Deshabilitar la restricción ALTER TABLE empleado NOCHECK CONSTRAINT salario INSERT INTO empleado VALUES (3,"Pat Jones",105000) -- Habilitar la restricción ALTER TABLE empleado CHECK CONSTRAINT salario INSERT INTO empleado VALUES (4,"Eric James",110000)

SQL SERVER Implementacion Pag.94

Page 95: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACIÓN DE ÍNDICES La creación de índices en SQL Server, así como en la mayoría de los SGBDR existentes, se debe realizar junto con la creación de la estructura de las tablas. De este modo se evitan posibles colisiones que pueden surgir al crear índices cuando la tabla ya tiene datos. Por ejemplo, si creamos un índice único por un campo, esto es no puede admitir duplicados, y se encuentran valores no únicos, la generación del índice daría un error. Sin embargo, SQL Server permite la creación de índices, aunque la base de datos esté cargada. ALTER TABLE TABLA ADD CONSTRAINT K1 PRIMARY KEY (COD1, COD2) Esta sentencia permite añadir una clave primaria en tabla, por los campos cod1 y cod2. Para crear un índice en la tabla todos, denominado Código, por el campo cod_cliente, se debe especificar el Código fuente CREATE INDEX CODIGO ON TODOS (COD_CLIENTE) Sí además queremos que el índice no admita valores nulos, se debe ejecutar el Código fuente CREATE UNIQUE INDEX codigo ON todos (cod) WITH IGNORE_DUP_KEY La sentencia que se encarga de borrar un índice, se muestra en el Código fuente Esta sentencia se encarga de borrar el índice código creado anteriormente. DROP INDEX codigo

Mas Ejemplos de indices con la siguiente tabla La tabla EMPLEADOS ya dispone de un indice que se genera automaticamente cuando se crea la clave Primaria vamos a añadir dos indices mas.

1. CREATE INDEX IDX_NOMB ON EMPLEADOS(NOMBRE) 2. CREATE INDEX IDX_APE ON EMPLEADOS(APELLIDOS)

Si desea hacer una selección de los registros de la tabla Empleados utilizando uno de sus indices creados en el ejemplo anterior haga lo siguiente: SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS(INDEX=2) SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS(INDEX=3) El numero 2 hace referencia al indice por el campo NOMBRE y el numero 3 por el campo APELLIDOS .El numero 1 esta reservado para el IDPRODUCTO que es la clave primaria Para obtener informacion acerca de los indices que tiene su tabla ejecute el procedimiento almacenado SP_HELPINDEX Ejemplo:

SP_HELPINDEX empleados /*empleados es el nombre de la tabla

SQL SERVER Implementacion Pag.95

Page 96: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EL LENGUAJE DE MANIPULACIÓN DE DATOS (DML) Ya se ha visto en un capítulo anterior el lenguaje de definición de datos (DDL), que es el que permite definir y modificar la estructura de un esquema. Veremos a continuación el otro lenguaje, el de manipulación de datos, que nos permite, como su propio nombre indica, manejar los datos contenidos en el esquema.

LA SENTENCIA INSERT La otra gran sentencia de manipulación de datos es INSERT. Si SELECT nos permitía recuperar datos, INSERT nos va a permitir añadirlos al esquema, es decir, con esta sentencia podemos añadir información a la base de datos. Recordemos que estamos en el modelo relacional, por lo que la información se añadirá a una tabla en forma de filas. Si sólo queremos insertar un valor para un atributo, el resto de los de la tabla deberá contener el valor nulo (NULL). Sin embargo, habrá ciertas ocasiones en que esto no será posible, cuando el atributo esté definido como NO NULO, en cuyo caso deberemos especificar un valor para éste. La sintaxis de esta sentencia es: INSERT INTO tabla (atributos) VALUES (valores) Donde tabla especifica la tabla en la cual se añadirá la fila, atributos es una lista de atributos separados por comas que determinan los atributos para los cuales se darán valores, y valores específicos los valores que se darán para estos atributos, separados por comas. Por ejemplo, si queremos añadir un nuevo cliente a nuestra base de datos, deberemos ejecutar el Código . INSERT INTO clientes (idcliente,nombre,apellidos) VALUES ('409-99-9876', 'Pepe', 'Perez') Destacar que si el valor a introducir es alfanumérico, deberá ir encerrado entre comillas, mientras que si es numérico no. Pues bien, si ejecutamos la anterior sentencia, obtenemos el siguiente error: Server: Msg 515, Level 16, State 2, Line 1 Cannot insert the value NULL into column 'idcontacto', table 'pubs.dbo.authors'; column does not allow nulls. INSERT fails. The statement has been terminated. La razón es que no hemos dado valor al atributo idcontacto, que ha sido definido como no nulo. Por lo tanto, rectificamos el Código fuente, para dar un valor al Código fuente 56. INSERT INTO authors (idcliente,nombre, apellidos,idcontacto) VALUES ('409-99-9876', 'Pepe', 'Perez', 1) LA SENTENCIA UPDATE

SQL SERVER Implementacion Pag.96

Page 97: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI El objetivo de la sentencia UPDATE es actualizar los valores de una o varias filas de una tabla, sin necesidad de borrarla e insertarla de nuevo. La sintaxis es la siguiente: UPDATE tabla SET atributo1 = valor1 , atributo2 = valor2, ... WHERE condición donde tabla especifica la tabla donde se encuentran las filas que queremos actualizar, condición especifica la condición que se debe cumplir para actualizar las filas, y lo que viene a continuación de SET especifica la asignación de los nuevos valores a los atributos. Por lo tanto se actualizarán todas las filas que cumplan la condición especificada. Si queremos cambiar el nombre al cliente que hemos insertado en el anterior apartado, deberemos escribir el Código fuente : Elevar los precios de los productos en 10% pero solo aquellos que pertenezcan a la Categoria 2 (Bebidas) UPDATE PRODUCTOS SET PRECIOUNIDAD = PRECIOUNIDAD+(PRECIOUNIDAD*010) WHERE IDCATEGORIA=2 Lo que hacemos con la anterior sentencia es incrementar en 10% el preciounidad de los productos pero solo aquellos de la idcategoria =2(condición where) cuyo codigo pertenece a la Categoria bebidas, Si ejecutamos la anterior sentencia, obtenemos el resultado: (32 row(s) affected) Lo que quiere decir que la fila ha sido actualizada con éxito. Podemos comprobarlo ejecutando el Código fuente SELECT * FROM Productos WHERE idcategoria = 2

LA SENTENCIA DELETE El objeto de la sentencia DELETE es el de borrar filas de una tabla. Para poder borrar filas en una tabla se deben cumplir las condiciones de seguridad determinadas por el administrador y deben de cumplirse también las reglas de integridad referencial. La sintaxis es la siguiente: DELETE FROM tabla WHERE condición Donde tabla especifica la tabla sobre la cual queremos borrar las filas, y condición especifica la condición que se debe cumplir para que se borren las filas. Si omitimos la condición, se borrarán todas las filas de la tabla, es decir, la sentencia que aparece en el Código fuente borra todas las filas de la tabla Pedidos DELETE FROM PEDIDOS Por ejemplo, si queremos borrar una fila que hemos creado en la tabla Pedidos, deberemos ejecutar el Código fuente obteniendo el siguiente resultado:

SQL SERVER Implementacion Pag.97

Page 98: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI (1 row(s) affected) DELETE FROM PEDIDOS WHERE IDPEDIDO = 11077

lo que viene a decir que la fila se ha borrado. Para comprobarlo, ejecutamos la sentencia que muestra el Código fuente. cuyo resultado es: (0 row(s) affected), lo que quiere decir que la fila no se encuentra en la tabla, es decir, ha sido borrada. SELECT * FROM PEDIDOS WHERE IDPEDIDO = 11077

SQL SERVER Implementacion Pag.98

Page 99: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.99

Page 100: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

BASE DE DATOS SUPERMERCADOSNEPTUNO Para seguir con los ejemplos del uso del Transact SQL utilizaremos la siguiente base de datos a la cual llamaremos SUPERMERCADOSNEPTUNO una base de datos creada como ejemplo que es muy similar a la base de datos Northwind que viene con SQL SERVER pero que utiliza los campos en nombre en español para hacer que los ejemplos que se desarrollen en este manual sean mas ilustrativos y didacticos a continucion presentamos el diseño en el siguiente diagrama

SQL SERVER Implementacion Pag.100

Page 101: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI A continuacion presentamos los comandos TRANSACT-SQL para poder crearla.

CREATE TABLE Empleados (IdEmpleado [int] NOT NULL IDENTITY PRIMARY KEY,Apellidos varchar(20),Nombre varchar (10) Cargo varchar(30),FechaNacimiento smalldatetime, FechaContratacion smalldatetime ,Direccion varchar(60),Ciudad varchar(15),Pais varchar(15),Fono varchar(24),Foto image NULL

CREATE TABLE Clientes(IdCliente varchar(5)INT NOT NULL PRIMARY KEY, NombreCompañía varchar(40),NombreContacto varchar(30), CargoContacto varchar(30),Dirección varchar(60), Ciudad varchar(15), País varchar(15), Teléfono varchar(24), Fax varchar (24)) CREATE TABLE Categorías (IdCategoría int NOT NULL IDENTITY Primary key,NombreCategoría varchar(15),Descripción text) CREATE TABLE Proveedores(IdProveedor int NOT NULL IDENTITY PRIMARY KEY,NombreCompañía varchar(40),Dirección varchar(60),Ciudad varchar(15),Teléfono varchar(24)

CREATE TABLE Productos(IdProducto int not null identity primary key,NombreProducto varchar(35), idproveedor REFERENCES Proveedores(idProveedor) ON UPDATE CASCADE ON DELETE CASCADE, idCategoria REFERENCES Categorias(idcategoria) ON UPDATE CASCADE ODELETE

CASCADE

N

SQL SERVER Implementacion Pag.101

Page 102: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREATE TABLE Pedidos(idpedido int not null identity primary key, idcliente varchar(6) REFERENCES Clientes(idcliente) ON UPDATE CASCADE ON DELETE CASCADE, idempleado int REFERENCES Empleados(idempleado) ON UPDATE CASCADE ON DELETE CASCADE, fechaPedido smallDatetime,FechaEnvio smallDatetime,FechaEntrega smallDatetime,cargo as varchar(25),Destinatario varchar(35),DireccionDestinatario varchar(50),PaisDestinatario varchar(35))

CREATE TABLE [Detalles de pedidos] (IDPEDIDO INT NOT NULL REFERENCES PEDIDOS(IDPEDIDO) ON UPDATE CASCADE ON DELETE CASCADE, IDPRODUCTO INT NOT NULL REFERENCES PRODUCTOS(IDPRODUCTO) ON UPDATE CASCADE ON DELETE CASCADE,PRECIOUNIDAD MONEY,CANTIDAD INT PRIMARY KEY(IDPEDIDO,IDPRODUCTO))

SQL SERVER Implementacion Pag.102

Page 103: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

MUESTRA DEL CONTENIDO REGISTROS DE CADA TABLA EMPLEADOS

CATEGORIAS

CLIENTES

PROVEEDORES

SQL SERVER Implementacion Pag.103

Page 104: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

PRODUCTOS

PEDIDOS

DETALLES DE PEDIDOS

SQL SERVER Implementacion Pag.104

Page 105: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.105

Page 106: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LA SENTENCIA SELECT La sentencia Select es una sentencia SQL, que pertenece al conjunto del Lenguaje de Manipulación de Datos, y que sirve para recuperar registros de una o varias tablas, de una o varias bases de datos. Su sintaxis es la siguiente: SELECT <atributos> FROM <tablas> [WHERE <condicion>] [GROUP BY <atributos>] [HAVING <condición>] [ORDER BY <atributos>] Donde las mayúsculas representan palabras reservadas, y lo encerrado entre corchetes es opcional, puede ser omitido. Una vez vista la anterior forma de representación, vamos a detenernos en la sintaxis de la sentencia Select. Se compone de tres partes:

• SELECT <atributos>: permite hacer una proyección de las tablas, es decir, seleccionar los campos que deseamos recuperar de la base de datos, separados por comas. Si se especifica el símbolo *, se obtendrán todos los campos de la tabla.

• FROM <tablas>: permite especificar la tabla de la cual se desean obtener los datos. Si

se especifica más de una tabla, éstas irán separadas por comas.

• WHERE <condición>: permite establecer una condición de recuperación de las filas de la/s tabla/s. Sólo se obtendrán aquellas Registros que verifiquen dicha condición, que será opcional.

En el caso de que se omita esta parte, se recuperarán todas las filas.

• GROUP BY <atributos>: permite establecer una selección de campos cuando se utilizan funciones escalares o de conteo (ya se verá más adelante lo que significa.

• HAVING <condición>: establece una condición para los atributos obtenidos como

resultado de la aplicación de funciones escalares.

• ORDER BY <atributos>: permite obtener el resultado de la consulta ordenado por los atributos especificados.

En el caso de que se especifiquen varias tablas, en la cláusula FROM, será conveniente denotar los campos de la cláusula SELECT precedidos por el nombre de la tabla donde se encuentra y un punto, para que, en el caso de que dicho campo exista en más de una tabla, se sepa en cada momento a cual de ellos nos estamos refiriendo, evitando en este caso el problema de ambigüedad.

SQL SERVER Implementacion Pag.106

Page 107: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EJEMPLOS DE SENTENCIAS SQL CON SELECT

1. Mostrar todos los registros de la tabla Productos SELECT * FROM PRODUCTOS

2. Mostrar nombre,apellidos y cargo de todos los empleados

SELECT NOMBRE,APELLIDOS,CARGO FROM EMPLEADOS

3. Mostrar los nombreproducto,preciounidad,stock de los productos que tengan un precio mayor a 20

SELECT NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS WHERE PRECIOUNIDAD>20

4. Mostrar nombreproducto,preciounidad,idcategoria de los productos que tengan un precio entre 25 y 35 soles SELECT NOMBREPRODUCTO,PRECIOUNIDAD,IDCATEGORIA FROM PRODUCTOS WHERE PRECIOUNIDAD BETWEEN 25 AND 35

SQL SERVER Implementacion Pag.107

Page 108: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 5. Mostrar los pedidos entregados entre el 18/6/95 y el 25/12/97

SELECT IDPEDIDO,IDCLIENTE,FECHAPEDIDO,FECHAENTREGA,CARGO FROM PEDIDOS WHERE FECHAPEDIDO BETWEEN ‘18/06/95’ AND ‘25/12/97’

6. Mostrar a los clientes que no tengan numero de fax

SELECT NOMBRECOMPAÑÍA,DIRECCIÓN,CIUDAD,PAIS,FAX FROM CLIENTES WHERE FAX IS NULL

7. Mostrar a los clientes que si tengan numero de fax

SELECT NOMBRECOMPAÑÍA,DIRECCIÓN,CIUDAD,PAIS,FAX FROM CLIENTES WHERE FAX IS NOT NULL

8. Mostrar los productos cuyo nombre empiezen con las letras “Que”

SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE NOMBREPRODUCTO LIKE ‘Que%’

9. Mostrar los productos que empiezen con las letras “A,B,C,D” SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE NOMBREPRODUCTO LIKE ‘[A-D]%’

10. Mostrar los clientes cuyo nombre termine en en la letra “S” SELECT IDCLIENTE,NOMBRECOMPAÑIA,DIRECCIÓN FROM CLIENTES WHERE NOMBRECOMPAÑIA LIKE ‘%S’

11. Mostrar un listado de productos ordenado por precio en forma Ascendente

SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS ORDER BY NOMBREPRODUCTO

12. Mostrar un listado de productos ordenado por precio en forma Descendente

SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS ORDER BY NOMBREPRODUCTO DESC

13. Mostrar los 3 productos mas Caros

SELECT TOP 3 IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC

14. Mostrar los 3 productos mas Baratos

SELECT TOP 3 IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC

15. Mostrar los productos que tengan un precio menor o igual a 50 y su stock se encuentre entre 60 y 80

SQL SERVER Implementacion Pag.108

Page 109: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI SELECT NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS WHERE (PRECIOUNIDAD <=50) AND (STOCK>=60 AND STOCK<=80)

16. Mostrar los clientes cuyo pais sea igual alemania o francia

SELECT NOMBRECOMPAÑIA,PAIS FROM CLIENTES WHERE PAIS=’ALEMANIA’ OR PAIS=’FRANCIA’

17. Mostrar los clientes cuyo pais sea Italia,brasil,francia,irlanda,españa y suecia

SELECT NOMBRECOMPAÑIA,PAIS FROM CLIENTES WHERE PAIS IN(‘ITALIA’,’BRASIL’,’FRANCIA’,’IRLANDA’,’ESPAÑA’,’SUECIA’)

18. Mostrar los pedidos del cliente cuyo codigo es ‘Anton’ o ‘bonap’ y la fecha de los pedidos sea mayor a 11/5/95 SELECT IDPEDIDO,IDCLIENTE,FECHAPEDIDO FROM PEDIDOS WHERE (IDCLIENTE=’ANTON’ OR IDCLIENTE=’BONAP’) AND (FECHAPEDIDO>’11/5/95’)

SQL SERVER Implementacion Pag.109

Page 110: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.110

Page 111: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CONSULTAS MULTITABLA En este tema vamos a estudiar las consultas multitabla llamadas así porque están basadas en más de una tabla.

El SQL de Microsoft Jet 4.x soporta dos grupos de consultas multitabla:

• la unión de tablas • la composición de tablas

LA UNIÓN DE TABLAS Esta operación se utiliza cuando tenemos dos tablas con las mismas columnas y queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. En este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las mismas que las de la segunda tabla).

Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y queremos una lista con todos los libros que tenemos. En este caso las dos tablas tienen las mismas columnas, lo único que varía son las filas, además queremos obtener una lista de libros (las columnas de una de las tablas) con las filas que están tanto en libros nuevos como las que están en libros antiguos, en este caso utilizaremos este tipo de operación.

Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o tablas lógicas (resultados de una consulta), esto nos permite utilizar la operación con más frecuencia ya que pocas veces tenemos en una base de datos tablas idénticas en cuanto a columnas. El resultado es siempre una tabla lógica.

Por ejemplo queremos en un sólo listado los productos cuyas existencias sean iguales a cero y también los productos que aparecen en pedidos del año 90. En este caso tenemos unos productos en la tabla de productos y los otros en la tabla de pedidos, las tablas no tienen las mismas columnas no se puede hacer una union de ellas pero lo que interesa realmente es el identificador del producto (idfab,idproducto), luego por una parte sacamos los códigos de los productos con existencias cero (con una consulta), por otra parte los códigos de los productos que aparecen en pedidos del año 90 (con otra consulta), y luego unimos estas dos tablas lógicas. El operador que permite realizar esta operación es el operador UNION.

SQL SERVER Implementacion Pag.111

Page 112: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LA COMPOSICIÓN DE TABLAS

La composición de tablas consiste en concatenar filas de una tabla con filas de otra. En este caso obtenemos una tabla con las columnas de la primera tabla unidas a las columnas de la segunda tabla, y las filas de la tabla resultante son concatenaciones de filas de la primera tabla con filas de la segunda tabla

El ejemplo anterior quedaría de la siguiente forma con la composición:

A diferencia de la unión la composición permite obtener una fila con datos de las dos tablas, esto es muy útil cuando queremos visualizar filas cuyos datos se encuentran en dos tablas.

Por ejemplo queremos listar los pedidos con el nombre del representante que ha hecho el pedido, pues los datos del pedido los tenemos en la tabla de pedidos pero el nombre del representante está en la tabla de empleados y además queremos que aparezcan en la misma línea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo expuesto a continuación, hemos seleccionado las filas que nos interesan).

Existen distintos tipos de composición, aprenderemos a utilizarlos todos y a elegir el tipo más apropiado a cada caso.

Los tipos de composición de tablas son:

El INNER JOIN El LEFT / RIGHT JOIN

SELECT *

FROM PEDIDOS,CLIENTES

WHERE PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE

SQL SERVER Implementacion Pag.112

Page 113: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

Combinamos todos los pedidos con todos los clientes pero luego seleccionamos los que cumplan que el código de cliente de la tabla de pedidos sea igual al código de cliente de la tabla de clientes, por lo tanto nos quedamos con los pedidos combinados con los datos del cliente correspondiente.

Las columnas que aparecen en la cláusula WHERE de nuestra consulta anterior se denominan columnas de emparejamiento ya que permiten emparejar las filas de las dos tablas. Las columnas de emparejamiento no tienen por qué estar incluidas en la lista de selección.

Normalmente emparejamos tablas que están relacionadas entre sí y una de las columnas de emparejamiento es clave principal, pues en este caso, cuando una de las columnas de emparejamiento tienen un índice definido es más eficiente utilizar otro tipo de composición, el INNER JOIN.

EL INNER JOIN El INNER JOIN es otro tipo de composición de tablas, permite emparejar filas de distintas tablas de forma más eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento está indexada. Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condición de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condición, con lo cual se emparejan sólo las filas que luego aparecen en el resultado.

La sintaxis es la siguiente:

Ejem:

SELECT *

FROM PEDIDOS

INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE

tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no, nombre de consulta guardada), de las tablas cuyos registros se van a combinar.

Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de tabla.

col1, col2 son las columnas de emparejamiento.

Observar que dentro de la cláusula ON los nombres de columna deben ser nombres cualificados (llevan delante el nombre de la tabla y un punto).

Las columnas de emparejamiento deben contener la misma clase de datos, las dos de tipo texto, de tipo fecha etc... los campos numéricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumérico(IDENTIDAD) y INT puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo INT y FLOAT. Además las columnas no pueden ser de tipo TEXT ni IMAGE

COMP representa cualquier operador de comparación ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condición de emparejamiento. Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condición entre paréntesis. Ejemplo: SELECT * FROM PROVEEDORES INNER JOIN PRODUCTOS ON PRODUCTOS PROVEEDORES.IDPROVEEDOR AND PROVEEDORES.IDPROVEEDOR = PRODUCTOS.IDPROVEEDOR

SQL SERVER Implementacion Pag.113

Page 114: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI Se pueden combinar más de dos tablas En este caso hay que sustituir en la sintaxis una tabla por un INNER JOIN completo. Por ejemplo: SELECT * FROM (PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE) INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO = EMPLEADOS.IDEMPLEADO

En vez de tabla1 hemos escrito un INNER JOIN completo, también podemos escribir:

SELECT * FROM CLIENTES INNER JOIN (PEDIDOS INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO = EMPLEADOS.IDEMPLEADO) ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE En este caso hemos sustituido tabla2 por un INNER JOIN completo.

El LEFT JOIN y RIGHT JOIN Crearemos otra base de datos llamada DBVENTAS la cual se utiiizara tambien con la base de datos SUPERMERCADOSNEPTUNO.las tablas de DBVENTAS seran las siguientes Para los siguientes ejemplos usaremos las siguientes tablas de ejemplo

Clientes

Clientes

Oficinas Empleados

Productos

SQL SERVER Implementacion Pag.114

Page 115: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI El LEFT JOIN y RIGHT JOIN son otro tipo de composición de tablas, también denominada composición externa. Son una extensión del INNER JOIN.

INNER JOIN) es una composicion interna ya que todos los valores de las filas del resultado son valores que están en las tablas que se combinan.

Con una composición interna sólo se obtienen las filas que tienen al menos una fila de la otra tabla que cumpla la condición, veamos un ejemplo:

Queremos combinar los empleados con las oficinas para saber la ciudad de la oficina donde trabaja cada empleado, si utilizamos un producto cartesiano tenemos:

SELECT EMPLEADOS.*,CIUDAD FROM EMPLEADOS, OFICINAS WHERE EMPLEADOS.OFICINA = OFICINAS.OFICINA Observar que hemos cualificado el nombre de columna oficina ya que ese nombre aparece en las dos tablas de la FROM.

Con esta sentencia los empleados que no tienen una oficina asignada (un valor nulo en el campo oficina de la tabla empleados) no aparecen en el resultado ya que la condición empleados.oficina = oficinas.oficina será siempre nula para esos empleados.

Si utilizamos el INNER JOIN

SELECT EMPLEADOS.*, CIUDAD FROM EMPLEADOS INNER JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA

Nos pasa lo mismo, el empleado 110 tiene un valor nulo en el campo oficina y no aparecerá en el resultado.

Pues en los casos en que queremos que también aparezcan las filas que no tienen una fila coincidente en la otra tabla, utilizaremos el LEFT o RIGHT JOIN. La sintaxis del LEFT JOIN es la siguiente:

La descripción de la sintaxis es la misma que la del INNER JOIN (ver página anterior), lo único que cambia es la palabra INNER por LEFT (izquierda en inglés).

Esta operación consiste en añadir al resultado del INNER JOIN las filas de la tabla de la izquierda que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la derecha con valores nulos.

Ejemplo:

SELECT * FROM EMPLEADOS LEFT JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA

Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su oficina, y el empleado 110 que no tiene oficina aparece con sus datos normales y los datos de su oficina a nulos.

La sintaxis del RIGHT JOIN es la siguiente:

SQL SERVER Implementacion Pag.115

Page 116: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI La sintaxis es la misma que la del INNER JOIN (ver página anterior), lo único que cambia es la palabra INNER por RIGHT (derecha en inglés).

Esta operación consiste en añadir al resultado del INNER JOIN las filas de la tabla de la derecha que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la izquierda con valores nulos.

Ejemplo:

SELECT * FROM empleados RIGHT JOIN oficinas ON empleados.oficina = oficinas.oficina

Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su oficina, y además aparece una fila por cada oficina que no está asignada a ningún empleado con los datos del empleado a nulos.

Una operación LEFT JOIN o RIGHT JOIN se puede anidar dentro de una operación INNER JOIN, pero una operación INNER JOIN no se puede anidar dentro de LEFT JOIN o RIGHT JOIN. Los anidamientos de JOIN de distinta naturaleza no funcionan siempre, a veces depende del orden en que colocamos las tablas, en estos casos lo mejor es probar y si no permite el anudamiento, cambiar el orden de las tablas ( y por tanto de los JOINs) dentro de la cláusula FROM.

Por ejemplo podemos tener:

SELECT * FROM CLIENTES INNER JOIN (EMPLEADOS LEFT JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA) ON CLIENTES.REPCLIE = EMPLEADOS.NUMCLIE

Combinamos empleados con oficinas para obtener los datos de la oficina de cada empleado, y luego añadimos los clientes de cada representante, así obtenemos los clientes que tienen un representante asignado y los datos de la oficina del representante asignado.

Si hubiéramos puesto INNER en vez de LEFT no saldrían los clientes que tienen el empleado 110 (porque no tiene oficina y por tanto no aparece en el resultado del LEFT JOIN y por tanto no entrará en el cálculo del INNER JOIN con clientes).

SQL SERVER Implementacion Pag.116

Page 117: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EJEMPLOS DE CONSULTAS MULTITABLA CON SUPERMERCADOSNEPTUNO

1. Mostrar Nombre del Producto,Precio Unidad del producto,Nombre de la Categoria,Nombre del Proveedor y stock de los productos

CON WHERE SELECT PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CATEGORIAS.NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAÑIA,STOCK FROM PRODUCTOS,CATEGORÍAS,PROVEEDORES WHERE PRODUCTOS.IDCATEGORIA=CATEGORIAS.IDCATEGORIA AND PRODUCTOS.IDPROVEEDOR=PROVEEDORES.IDPROVEEDOR

CON INNER JOIN SELECT PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CATEGORIAS.NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAÑIA,STOCK FROM PRODUCTOS INNER JOIN CATEGORIAS ON PRODUCTOS.IDCATEGORIA=CATEGORIAS.IDCATEGORIA INNER JOIN PROVEEDORES ON PRODUCTOS.IDPROVEEDOR=PROVEEDORES.IDPROVEEDOR

2. Mostrar los pedidos con los siguientes datos idpedido,fechapedido,nombre del cliente,el nombre del empleado y el cargo de pedido

SELECT PEDIDOS.IDPEDIDO,PEDIDOS.FECHAPEDIDO,CLIENTES.NOMBRECOMPAÑIA,EMPLEADOS.APELLIDOS+ ‘ ‘ + EMPLEADOS.NOMBRE,PEDIDOS.CARGO FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO

SQL SERVER Implementacion Pag.117

Page 118: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.118

Page 119: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

FUNCIONES DE SQL SERVER FUNCIONES DE TIPO FECHA Estas funciones escalares realizan una operación sobre un valor de fecha y hora de entrada, y devuelven un valor de cadena, numérico o de fecha y hora.

DATEADD Devuelve un valor datetime nuevo que se basa en la suma de un intervalo a la fecha especificada. Sintaxis

DATEADD ( partedeFecha , numero, Fecha )

Parte de fecha Abreviaturas

Year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

Mostrar la fecha de pago de los pedidos incrementando en 21 dias la fecha de pedido

SELECT DATEADD(day, 21, FechaPedido) AS FechaPago FROM pedidos

DATEDIFF Devuelve el número de dias,meses o años que han transcurrido entre dos fechas especificadas. Sintaxis

DATEDIFF ( parteFecha , Fechainicial , fechafinal ) SELECT NOMBRE,APELLIDOS, DATEDIFF(YEAR,FECHANACIMIENTO,GETDATE()) AS EDAD FROM EMPLEADOS

SQL SERVER Implementacion Pag.119

Page 120: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

DATENAME Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha especificada.

Sintaxis DATENAME (parteFecha , fecha ) En este ejemplo se extrae el nombre del mes de la fecha devuelta por GETDATE. SELECT IDPEDIDO,FECHAPEDIDO,FECHAENVIO,FECHAENTREGA,DATENAME(MONTH, FECHAPEDIDO) AS MESPEDIDO FROM PEDIDOS El siguiente es el conjunto de resultados:

DATEPART Devuelve un entero que representa la parte de la fecha especificada de la fecha indicada. Sintaxis DATEPART ( parteFecha , fecha )

La función GETDATE devuelve la fecha actual; sin embargo, la fecha completa no es siempre la información que se necesita para la comparación (a menudo, sólo se compara una parte de la fecha). En este ejemplo se muestra la salida de GETDATE y la de DATEPART.

SELECT GETDATE() AS 'FechaActual' GO El siguiente es el conjunto de resultados: FechaActual --------------------------- Feb 18 1998 11:46PM

En este ejemplo se supone que la fecha es el 29 de mayo. SELECT DATEPART(month, GETDATE()) GO El siguiente es el conjunto de resultados: ----------- 5

SQL SERVER Implementacion Pag.120

Page 121: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

DAY Devuelve un entero que representa la parte del día de la fecha especificada. Sintaxis DAY ( fecha ) En este ejemplo se devuelve el número del día de la fecha 12/03/1998.

SELECT DAY('03/12/1998') AS 'NumeroDia' GO El siguiente es el conjunto de resultados: NumeroDia ------------ 12

MONTH Devuelve un entero que representa el mes de una fecha especificada. Sintaxis MONTH ( Fecha ) Este ejemplo devuelve el número del mes de la fecha 03/12/1998.

SELECT "NumeroMes" = MONTH('03/12/1998') GO El siguiente es el conjunto de resultados: NumeroMes ------------ 3

YEAR Devuelve un entero que representa la parte de año de la fecha especificada. Sintaxis YEAR ( Fecha ) Este ejemplo devuelve el número del año de la fecha 03/12/1998. SELECT "NumeroAño" = YEAR('03/12/1998') GO

El siguiente es el conjunto de resultados:

NumeroAño ------------ 1998

SQL SERVER Implementacion Pag.121

Page 122: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

UTILIZAR FUNCIONES MATEMÁTICAS Una función matemática realiza una operación matemática en expresiones numéricas y devuelve el resultado de la operación. Las funciones matemáticas operan sobre datos numéricos suministrados por el sistema Microsoft SQL Server (decimal, integer, float, real, money, smallmoney, smallint y tinyint). La precisión de las operaciones integradas para el tipo de datos float es, de forma predeterminada, de seis lugares decimales.

ROUND Devuelve una expresión numérica, redondeada a la longitud o precisión especificada. Sintaxis ROUND ( numero , longitud )

Ejemplos Resultado ROUND(748.58, -1) 750.00 ROUND(748.58, -2) 700.00 ROUND(748.58, -3) 1000.00 ROUND(123.4545, 2) 123.4500 ROUND(123.45, -2) 100.00

CEILING Devuelve un numero entero más pequeño mayor o igual que la expresión numérica dada. Sintaxis CEILING ( expressionNumerica ) Este ejemplo muestra valores numéricos positivos, negativos y cero con la función CEILING. SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0)

El siguiente es el conjunto de resultados: --------- --------- ------------------------- 124.00 -123.00 0.00

FLOOR Devuelve el numero entero más grande menor o igual que la expresión numérica dada. Sintaxis

FLOOR ( expresionNumerica ) Este ejemplo muestra valores numéricos positivos, negativos y valores de moneda con la función FLOOR. SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45)

El resultado es la parte entera del valor calculado en el tipo de datos correspondiente a expresionNumerica --------- --------- ----------- 123 -124 123.0000

POWER Devuelve el valor de la expresión indicada elevada a la potencia especificada.

SQL SERVER Implementacion Pag.122

Page 123: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI Sintaxis POWER ( expression numerica, EXPONENTE ) Ejemplo elevar el valor 2 al cubo SELECT POWER(2,3) Resultado es igual a 8

SQRT Devuelve la raíz cuadrada de la expresión especificada. Sintaxis SQRT ( expressionNumerica )

DECLARE @myvalue float SET @myvalue = 16 SELECT SQRT(@myvalue) Devuelve 4

UTILIZAR FUNCIONES DE TEXTOS Estas funciones escalares realizan una operación sobre una cadena de entrada y devuelven un valor de cadena o un valor numérico.

UPPER Convierte de minúsculas a mayúsculas Sintaxis UPPER (expressionTexto)

Ejemplos

En este ejemplo se utiliza la funcion UPPER para devolver el primer apellido del empleado concatenado con el nombre.

SELECT UPPER(NOMBRE) + ', ' + APELLIDOS AS NAME FROM EMPLEADOS ORDER BY APELLIDOS

LOWER Convierte de mayúsculas a minusculas Sintaxis

LOWER ( expressionTexto ) Muestra los nombres de los clientes en minusculas

SELECT LOWER(NOMBRECOMPAÑIA) FROM CLIENTES

SQL SERVER Implementacion Pag.123

Page 124: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LEFT Extrae caracteres empezando por el lado izquierdo de la cadena especificada como expresion de texto Sintaxis LEFT ( expressionTexto,numeroCaracteres )

Este ejemplo devuelve los cinco caracteres situados más a la izquierda de cada nombre del producto

SELECT LEFT(NOMBREPRODUCTO, 5) FROM PRODUCTOS

RIGHT Extrae caracteres empezando por el lado derecho de la cadena de caracteres Sintaxis RIGHT ( expressionTexto , numeroCaracteres)

Este ejemplo devuelve los cinco caracteres situados más a la derecha de cada nombre del producto.

SELECT RIGHT(NOMBREPRODUCTO, 5) FROM PRODUCTOS

LEN Devuelve el número de caracteres de la expresión de cadena dada, excluidos los espacios finales en blanco. Sintaxis LEN ( expressionTexto ) Ejemplo : SELECT NOMBREPRODUCTO,LEN(NOMBREPRODUCTO) AS TOTALCARACTERES FROM PRODUCTOS

SQL SERVER Implementacion Pag.124

Page 125: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SUBSTRING Devuelve una parte de una expresión de caracteres Sintaxis

SUBSTRING ( expressionTexto , Posicion inicial , numeroCaracteres) En el ejemplo siguiente se muestra cómo obtener parte de una cadena de caracteres. En la tabla Empleados, esta consulta obtiene los apellidos en una columna y sólo la primera inicial en la segunda columna.

SELECT nombre, SUBSTRING(Apellidos, 1, 1) FROM authors ORDER BY Apellidos

REPLACE Reemplaza por una tercera expresión todas las apariciones de la segunda expresión de cadena proporcionada en la primera expresión de cadena. Sintaxis REPLACE ( 'expressionTexto1' , 'expressionTexto2' , ‘expressionTexto3' )

En este ejemplo se reemplaza la cadena "cde" de "abcdefghi" por "xxx". SELECT REPLACE('abcdefghicde','cde','xxx')

PATINDEX Devuelve la posición inicial de la primera aparición de un patrón en la expresión especificada o ceros si el patrón no se encuentra, con todos los tipos de datos de texto y caracteres. Sintaxis PATINDEX ( '%pattern%' , expression )

En este ejemplo se busca la posición en que comienza el patrón "secas" en una fila específica de la columna NombreProducto de la tabla Productos SELECT PATINDEX('%secas%', nombreProducto) FROM Productos WHERE idProducto = 7

El siguiente es el conjunto de resultados:

----------- 7

STUFF Elimina el número de caracteres especificado e inserta otro conjunto de caracteres en un punto de inicio indicado.

Sintaxis STUFF (expressionTexto , PosInicial , longitud , expressiontexto ) En el ejemplo siguiente se obtiene una cadena de caracteres creada al eliminar tres caracteres de la primera cadena (abcdef) a partir de la posición 2 (la letra b) e insertar la segunda cadena en el punto de eliminación.

SELECT STUFF('abcdef', 2, 3, 'ijklmn')

SQL SERVER Implementacion Pag.125

Page 126: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI El siguiente es el conjunto de resultados: --------- aijklmnef

STR Devuelve datos de tipo carácter obtenidos a partir de datos numéricos.

Sintaxis STR ( expressionNumerica ) En el ejemplo siguiente se convierte una expresión formada por cinco dígitos y un separador decimal en una cadena de caracteres de seis posiciones. La parte fraccionaria del número se redondea a un lugar decimal. SELECT STR(123.45, 6, 1) El siguiente es el conjunto de resultados: ------ 123.5

SPACE Devuelve una cadena de espacios repetidos.

Sintaxis SPACE ( expressionNumero ) En el ejemplo siguiente se corta el apellido de cada cliente y se concatena una coma, dos espacios y su nombre. SELECT RTRIM(Nombre) + ',' + SPACE(2) + LTRIM(apellidos) FROM Empleados ORDER BY Nombre, Apellidos El siguiente es el conjunto de resultados:

CHAR Una función de cadena que convierte un código ASCII int en un carácter. Sintaxis

CHAR ( expresionNumerica ) Este ejemplo utiliza CHAR(13) para imprimir la información de nombre, dirección y ciudad en líneas separadas, cuando los resultados se devuelven en texto.

SELECT Nombre + ' ' + Apellidos, + CHAR(13) + Direccion, + CHAR(13) + Ciudad + Pais FROM Empleados WHERE IdEmpleado = 1

El siguiente es el conjunto de resultados: Nancy Davolio 507 - 20th Ave. E. Apt. 2A

SQL SERVER Implementacion Pag.126

Page 127: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI Seattle WA

ASCII Devuelve el código ASCII del carácter más a la izquierda de una expresión de caracteres. Sintaxis

ASCII ( expressionTexto ) SELECT ASCII(‘A’) Devuelve 65

REPLICATE Repite una expresión de caracteres un número especificado de veces. Sintaxis REPLICATE ( expressionTexto , numeroVeces )

En este ejemplo se duplica el nombre de cada Empleado dos veces. SELECT REPLICATE(Nombre, 2)

FROM Empleados ORDER BY nombre

SQL SERVER Implementacion Pag.127

Page 128: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

FUNCIONES DE CONVERSION

CAST y CONVERT Convierten una expresión de un tipo de datos en otro. CAST y CONVERT proporcionan funciones similares.

Este ejemplo concatena expresiones mediante la función de conversión de tipos de datos CAST.

SELECT 'EL PRECIO ES ' + CAST(PRECIOUNIDAD AS VARCHAR(12)) FROM PRODUCTOS WHERE PRECIOUNIDAD > 10.00

El siguiente es el conjunto de resultados:

--------------------------- The precio es 19.99 The precio es 11.95

Este ejemplo convierte una columna de tipo int (la columna idPedido) en una columna de tipo char(20) para poder utilizarla en una cláusula LIKE.

Mostrar los pedidos cuyo el mes de la fechaPedido sea igual Agosto y el numero de pedido empieze en los numeros 12 SELECT IDPEDIDO,FECHAPEDIDO FROM PEDIDOS WHERE CAST(IDPEDIDO AS CHAR(20)) LIKE '12%' AND MONTH(FECHAPEDIDO) = 8 GO La function GetDate() devuelve la Fecha y la hora Actual en este formato Si desea obtener solo la fecha en formato Dia Mes Año sin incluir la hora actual haga lo siguiente SELECT CONVERT(VARCHAR(8),GETDATE(),3) SELECT CONVERT(VARCHAR(10),GETDATE(),103)

SQL SERVER Implementacion Pag.128

Page 129: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

COMANDOS SET El lenguaje de programación Transact-SQL ofrece varias instrucciones SET que alteran el tratamiento de información de SQL SERVER..

Las instrucciones SET se dividen en las siguientes categorías:

Categoría Altera la configuración de la sesión actual para

Fecha y hora Tratar datos de fecha y hora.

Bloqueo Tratar el bloqueo en Microsoft SQL Server

Varias Diversa funcionalidad de SQL Server.

Ejecución de consultas Ejecutar y procesar consultas.

Valores de SQL-92 Utilizar la configuración predeterminada de SQL-92.

Estadísticas Presentar información estadística.

Transacciones Tratar transacciones de SQL Server.

SET DATEFIRST Establece como primer día de la semana un número del 1 al 7. Sintaxis SET DATEFIRST { number | @number_var } Es un entero que indica el primer día de la semana y puede tener uno de los valores siguientes.

Valor Primer día de la semana:

1 Lunes

2 Martes

3 Miércoles

4 Jueves

5 Viernes

6 Sábado

7 (predeterminado, Inglés EE.UU.)

Domingo

Puede utilizar la función @@DATEFIRST para conocer el valor actual de SET DATEFIRST. SELECT @@DATEFIRST En este ejemplo se indica el día de la semana correspondiente a un valor de fecha y se muestra el efecto de cambiar la opción DATEFIRST. SET DATEFIRST 7 GO SELECT CAST('1/1/99' AS DATETIME), DATEPART(DW, '1/1/99')

SQL SERVER Implementacion Pag.129

Page 130: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SET DATEFORMAT Determina el orden de las partes de la fecha (mes/día/año) para escribir datos de tipo datetime o smalldatetime.

Sintaxis

SET DATEFORMAT { format | @format_var }

Este valor sólo se utiliza en la interpretación de las cadenas de caracteres cuando se convierten en valores de fecha. No tiene ningún efecto en la presentación de los valores de fecha.

En este ejemplo se usan distintos formatos de fecha para tratar cadenas de fecha con formatos diferentes.

/*Establecemos el formato en Mes Dia Año

SET DATEFORMAT MDY GO /*DECLARAMOS UNA VARIABLE LLAMADA @DATEVAR DE TIPO FECHA DECLARE @DATEVAR DATETIME /*ASIGNAMOS EL VALOR A LA VARIABLE SET @DATEVAR = '12/31/98' /*MOSTRAMOS EL VALOR DE LA VARIABLE SELECT @DATEVAR GO

/* Establecemos el formato en Año Dia mes y hacemos lo mismo que el Ejemplo Anterior

SET DATEFORMAT DMY GO DECLARE @DATEVAR DATETIME SET @DATEVAR = '31/12/98' SELECT @DATEVAR GO

SET IDENTITY_INSERT Permite insertar valores explícitos en la columna identidad(Autonumerica) de una tabla.Por ejemplo la tabla PRODUCTOS tiene el campo idproducto como clave primaria y es una columna con la propiedad identidad establecida en si Ejemplos En este ejemplo se crea una tabla con una columna de identidad y se muestra cómo se puede usar la opción SET IDENTITY_INSERT para llenar un hueco en los valores de identidad causado por una instrucción DELETE.

SQL SERVER Implementacion Pag.130

Page 131: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 1. Tenemos la siguiente tabla

2. Eliminamos la categoria de codigo 7

DELETE FROM CATEGORÍAS WHERE IDCATEGORÍA = 7 GO SELECT * FROM CATEGORÍAS GO

Ahora si queremos insertar un nuevo registro con el codigo numero 7 que fue eliminado no sera posible porque SQL SERVER nos enviara el sgte error Servidor: mensaje 544, nivel 16, estado 1, línea 1 No se puede insertar un valor explícito en la columna de identidad de la tabla 'Categorías' cuando IDENTITY_INSERT es OFF Para solucionar este problema usaremos la siguiente instrucción SET IDENTITY_INSERT CATEGORÍAS ON GO INSERT INTO CATEGORÍAS(IDCATEGORÍA, NOMBRECATEGORÍA) VALUES(7, 'FRUTAS/VERDURAS') GO /*EXAMINE LOS RESULTADOS*/ SELECT * FROM CATEGORIAS

SET LANGUAGE Especifica el idioma de entorno de la sesión. El idioma de la sesión determina los formatos de datetime y los mensajes del sistema.utilice la funcion @@LANGUAGE Para averiguar el nombre del idioma en uso. En este ejemplo se establece como idioma predeterminado en español SET LANGUAGE spanish GO

SQL SERVER Implementacion Pag.131

Page 132: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SET NOCOUNT Hace que deje de devolverse como parte de los resultados el mensaje que indica el número de filas afectado por una instrucción Transact-SQL. Sintaxis SET NOCOUNT { ON | OFF }

Cuando SET NOCOUNT es ON, no se devuelve el número de filas afectado por una instrucción Transact-SQL. Cuando SET NOCOUNT es OFF, sí se devuelve ese número.

La función @@ROWCOUNT se actualiza incluso cuando SET NOCOUNT es ON.

Este ejemplo en el Analizador de consultas de SQLse impide que aparezca el mensaje con el número de filas afectadas.

GO SELECT IDPEDIDO FROM PEDIDOS GO SET NOCOUNT ON GO SELECT IDPEDIDO FROM PEDIDOS GO /*PARA REESTABLECERLO DESACTIVE EL COMANDO EN OFF*/ SET NOCOUNT OFF GO

SET ROWCOUNT Hace que Microsoft SQL Server deje de procesar la consulta cuando se haya devuelto el número de filas especificado. SET ROWCOUNT detiene el procesamiento cuando se alcanza el número de filas especificado. En este ejemplo, observe que hay x filas que cumplen el criterio de anticipo inferior o igual a 10 $; aunque por el número de filas que devuelve la actualización se puede ver que no se procesaron todas. ROWCOUNT afecta a todas las instrucciones de Transact-SQL. SELECT COUNT(*) AS Contador FROM Pedidos WHERE Cargo >= 10 GO

A continuación se establece 4 en ROWCOUNT y se actualizan todas las filas con anticipos de 10 $ o más.

SET ROWCOUNT 4 GO UPDATE PEDIDOS SET CARGO = 7.5 WHERE CARGO >= 10 GO

SQL SERVER Implementacion Pag.132

Page 133: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

VARIABLES GLOBALES Existe un conjunto de variables globales, que informan en cada momento del estado del sistema, o del resultado de una consulta, etc. Esta variables se pueden distinguir porque comienzan por dos arrobas@@. La Tabla muestra un resumen con las variables globales que nos pueden resultar de utilidad:

SQL SERVER Implementacion Pag.133

Page 134: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.134

Page 135: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

USO DE SELECT CON CAMPOS CALCULADOS En los capitulos anteriores aprendimos a usar FUNCIONES y utilizar comandos SET ahora vamos a desarrollar ejemplos de consultas SELECT para obtener campos calculados Ejemplo :En la tabla Empleados tenemos la fecha de nacimiento de los empleados y la Fecha de contratacion pero no tenemos un campo que nos muestre explicitamente la Edad ni el Tiempo de Servicio para ello desarrollaremos los siguiente SELECT NOMBRE, APELLIDOS, FECHANACIMIENTO, DATEDIFF(YEAR,FECHANACIMIENTO,GETDATE()) AS EDAD, FECHACONTRATACION, DATEDIFF(YEAR,FECHACONTRATACION,GETDATE()) AS [TIEMPO SERVICIO] FROM EMPLEADOS 1. Mostrar los dias Transcurridos entre la fecha de Pedido y la Fecha de entrega de todos los

Pedidos entregados al pais de Alemania SELECT IDPEDIDO, FECHAPEDIDO, FECHAENTREGA, DATEDIFF(DAY,FECHAPEDIDO,FECHAENTREGA) AS [DIAS TRANSCURRIDOS], FROM PEDIDOS WHERE PAÍS=”ALEMANIA”

2. Mostrar el incremento de los precios de los productos en un 10%

SELECT IDPRODUCTO, NOMBREPRODUCTO, PRECIOUNIDAD, PRECIOUNIDAD*.010 AS INCREMENTO, PRECIOUNIDAD+(PRECIOUNIDAD)*.010 AS [PRECIO INCREMENTADO] FROM PRODUCTOS

3. Mostrar el total de cada detalle de pedido

SELECT [DETALLES DE PEDIDOS].CANTIDAD, PRODUCTOS.NOMBREPRODUCTO, [DETALLES DE PEDIDOS].PRECIOUNIDAD, [DETALLES DE PEDIDOS].CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO

SQL SERVER Implementacion Pag.135

Page 136: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

FUNCIONES ESCALARES PARA SELECT Entendemos por funciones escalares, todas aquellas que permiten realizar operaciones de conteo de filas, suma de atributos, obtención de medias, etc. Dichas funciones se especifican a continuación de la palabra reservada SELECT. Las funciones que soporta la sentencia SELECT en el Transact SQL son las siguientes:

FUNCION SUM Realiza una suma de toda una columna para todas las filas accedidas mediante una consulta SQL. SELECT SUM (CARGO) FROM PEDIDOS La anterior consulta obtiene la suma del precio para todas las filas de la tabla pedido, ya que no hemos especificado ninguna condición en la cláusula WHERE. Si ahora queremos obtener la suma total de todos los pedidos realizados por el cliente cuyo código es "ANTON", debemos realizar la misma consulta, pero especificando una condición para obtener únicamente las filas cuyo cod_cliente es "ANTON": SELECT SUM(CARGO) FROM PEDIDOS WHERE IDCLIENTE = "ANTON"

FUNCION COUNT Cuenta todas las filas de las tablas accedidas mediante una consulta SQL. Por ejemplo, si tenemos una tabla cliente, con todos los clientes de una empresa de servicios, con los atributos idCliente, nombre, apellidos, dirección, y queremos saber todos los clientes que tenemos, deberemos realizar un count, para obtener todas el número de filas de la tabla ejecutamos el Código fuente SELECT COUNT(IDCLIENTE) FROM CLIENTES En el anterior ejemplo, al existir el mismo número de filas, sea cual sea el atributo que seleccionemos, podríamos haber escogido cualquier otro. En general, se suele escribir el Código fuente SELECT COUNT(*) FROM CLIENTES Si ahora queremos saber el número de clientes que viven en Madrid, deberemos realizar un conteo de todas las filas con la condición de que el atributo ciudad sea Madrid. SELECT COUNT(*) FROM CLIENTES WHERE CIUDAD = "MADRID" Y si queremos saber cuantos Productos tenemos, cuyo precio es mayor de 20, deberemos realizar lo mismo, pero especificando esta condición en la cláusula WHERE. Al resultado de la búsqueda le llamaremos Caros. SELECT COUNT(*) AS CAROS FROM PRODUCTOS WHERE PRECIOUNIDAD > 20

SQL SERVER Implementacion Pag.136

Page 137: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

FUNCION AVG Realiza una media aritmética de los atributos para todas las filas accedidas mediante la consulta SQL. Si por ejemplo tenemos una tabla de materiales, con los atributos cod_material, descripción, precio y cantidad _ pedida, y queremos saber la cantidad media pedida de todos los materiales, deberemos realizar una media aritmética, teniendo en cuenta todas las filas de la tabla: SELECT AVG(CANTIDAD _ PEDIDA) FROM MATERIAL La anterior sentencia, internamente, realiza primero una suma de todos los valores, y a continuación la divide por el número total de filas accedidas, es decir, realiza la media aritmética. Volviendo a nuestra cultural base de datos SUPERMERCADOSNEPTUNO, si queremos saber la media del precio de los títulos que tenemos disponibles, deberemos ejecutar el Código fuente SELECT AVG(PRECIOUNIDAD) AS PROMEDIO FROM PRODUCTOS FUNCION MAX Obtiene el máximo valor del atributo especificado, de entre todas las filas seleccionadas mediante la sentencia SQL. Supóngase, por ejemplo, que tenemos la tabla de materiales descrita anteriormente. Si queremos saber el material mas caro, deberemos realizar un SELECT con la cláusula Max, que obtenga el mayor valor para el atributo precio de todas las filas. Para nuestro ejemplo, si queremos saber cual es el libro más caro, ejecutaremos el Código fuente SELECT MAX(PRECIOUNIDAD) AS CARO FROM PRODUCTOS FUNCION MIN Obtiene el mínimo valor del atributo especificado, de entre todas las filas seleccionadas mediante la sentencia SQL. Si queremos saber cual es el PRODUCTOS más barato de nuestra base de datos, deberemos ejecutar el Código fuente SELECT MIN(PRECIOUNIDAD) AS BARATO FROM PRODUCTOS

SQL SERVER Implementacion Pag.137

Page 138: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LA CLAUSULA COMPUTE Esta clausula añade una fila en el conjunto de datos que se esta recuperando,se utiliza para realizar calculos en campos numericos.COMPUTE actua siempre sobre un campo o expresion del conjunto de resultados y esta expresion debe figurar exactamente igual en la clausula SELECT y siempre se debe ordenar el resultado por la misma o al menos agrupar el resultado.Esta expresion no puede utilizar ningun ALIAS SELECT IDPEDIDO,CANTIDAD,NOMBREPRODUCTO,[DETALLES DE PEDIDOS].PRECIOUNIDAD,CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO ORDER BY IDPEDIDO COMPUTE SUM(CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD) BY IDPEDIDO

SELECT IDPEDIDO,CANTIDAD,NOMBREPRODUCTO,[DETALLES DE PEDIDOS].PRECIOUNIDAD,CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO WHERE IDPEDIDO=10250 COMPUTE SUM(CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD)

SQL SERVER Implementacion Pag.138

Page 139: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LA CLAUSULA GROUP BY Se pueden obtener subtotales con la cláusula GROUP BY. Una consulta con una cláusula GROUP BY se denomina consulta agrupada ya que agrupa los datos de la tabla origen y produce una única fila resumen por cada grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de agrupación. Ejemplos

1. Mostrar el total de clientes que tiene la empresa en cada pais SELECT PAÍS,COUNT(IDCLIENTE) AS [TOTAL CLIENTES] FROM CLIENTES GROUP BY PAÍS ORDER BY COUNT(IDCLIENTE) DESC

2. Mostrar el precio del producto mas caro de cada categoria SELECT NOMBRECATEGORÍA,MAX(PRECIOUNIDAD) AS [Mas Caros] FROM CATEGORÍAS INNER JOIN PRODUCTOS ON CATEGORÍAS.IDCATEGORÍA=PRODUCTOS.IDCATEGORÍA GROUP BY NOMBRECATEGORÍA

3. Mostrar el Monto total de cada Pedido

SELECT IDPEDIDO,SUM(CANTIDAD*PRECIOUNIDAD) AS [TOTAL PEDIDO] FROM [DETALLES DE PEDIDOS] GROUP BY IDPEDIDO

SQL SERVER Implementacion Pag.139

Page 140: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 4. Mostrar el total de compras por cliente en el año 1995

SELECT NOMBRECOMPAÑÍA, YEAR(FECHAPEDIDO) AS AÑO, SUM(CANTIDAD*PRECIOUNIDAD) AS [TOTAL COMPRAS] FROM CLIENTES INNER JOIN PEDIDOS ON CLIENTES.IDCLIENTE=PEDIDOS.IDCLIENTE INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE YEAR(FECHAPEDIDO)=1995 GROUP BY NOMBRECOMPAÑÍA,YEAR(FECHAPEDIDO)

5. Mostrar los tres mejores empleados tomando en cuenta la cantidad de pedidos

despachados SELECT TOP 3 NOMBRE+' '+APELLIDOS AS EMPLEADO, COUNT(IDPEDIDO) AS [TOTAL DESPACHADOS] FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO GROUP BY NOMBRE+' '+APELLIDOS ORDER BY COUNT(IDPEDIDO) DESC

6. Mostrar el total de ventas del dia actual SELECT FECHAPEDIDO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE FECHAPEDIDO= CONVERT(CHAR(10),GETDATE(),103) GROUP BY FECHAPEDIDO

SQL SERVER Implementacion Pag.140

Page 141: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

7. Mostrar el total de ventas del MES actual del AÑO Actual SELECT MONTH(FECHAPEDIDO)AS MES,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE MONTH(FECHAPEDIDO)=MONTH(GETDATE()) AND YEAR(FECHAPEDIDO)=YEAR(GETDATE()) GROUP BY MONTH(FECHAPEDIDO)

8. Mostrar el total de ventas del AÑO Actual

SELECT YEAR(FECHAPEDIDO) AS AÑO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE YEAR(FECHAPEDIDO)= YEAR(GETDATE()) GROUP BY YEAR(FECHAPEDIDO)

8. Mostrar los tres productos menos vendidos

SELECT TOP 3 NOMBREPRODUCTO,SUM(CANTIDAD) AS [TOTAL VENDIDOS] FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO GROUP BY NOMBREPRODUCTO ORDER BY SUM(CANTIDAD)

9. Mostrar el total de ventas en cada pais

SELECT PAÍSDESTINATARIO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO GROUP BY PAÍSDESTINATARIO ORDER BY SUM(CANTIDAD*CANTIDAD)DESC

SQL SERVER Implementacion Pag.141

Page 142: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.142

Page 143: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

USO DE SUBCONSULTAS

Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que llamaremos consulta principal.

Se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula HAVING de la consulta principal.

Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre paréntesis, no puede contener la cláusula ORDER BY, ni puede ser la UNION de varias sentencias SELECT, además tiene algunas restricciones en cuanto a número de columnas según el lugar donde aparece en la consulta principal. Estas restricciones las iremos describiendo en cada caso.

Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal. Se aconseja no utilizar campos calculados en las subconsultas, ralentizan la consulta.

Las consultas que utilizan subconsultas suelen ser más fáciles de interpretar por el usuario

Ejemplo:usando SUPERMERCADOSNEPTUNO Mostrar los productos que tengan un precio mayor al precio promedio de todos los productos SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE PRECIOUNIDAD>(SELECT AVG(PRECIOUNIDAD) FROM PRODUCTOS)

TEST DE COMPARACION ANY Tenemos el test ANY (algún, alguno en inglés) y el test ALL (todos en inglés).

• La subconsulta debe devolver una única columna sino se produce un error. • Se evalúa la comparación con cada valor devuelto por la subconsulta. • Si alguna de las comparaciones individuales produce el resultado verdadero, el test

ANY devuelve el resultado verdadero. • Si la subconsulta no devuelve ningún valor, el test any devuelve falso.

si el test de comparación es falso para todos los valores de la columna, ANY devuelve falso.

• Si el test de comparación no es verdadero para ningún valor de la columna, y es nulo para al menos alguno de los valores, ANY devuelve Nulo.

Ejemplo:usando BDVENTAS

SQL SERVER Implementacion Pag.143

Page 144: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ANY (SELECT SUM(CUOTA) FROM EMPLEADOS GROUP BY OFICINA) En este caso la subconsulta devuelve una única columna con las sumas de las cuotas de los empleados de cada oficina. Y luego se Lista las oficinas cuyo objetivo sea superior a alguna de las sumas obtenidas.

EL TEST DE COMPARACION ALL.

• La subconsulta debe devolver una única columna sino se produce un error. • Se evalúa la comparación con cada valor devuelto por la subconsulta. • Si todas las comparaciones individuales, producen un resultado verdadero, el test

devuelve el valor verdadero. • Si la subconsulta no devuelve ningún valor el test ALL devuelve el valor verdadero.

(¡Ojo con esto!) • Si el test de comparación es falso para algún valor de la columna, el resultado es

falso. • Si el test de comparación no es falso para ningún valor de la columna, pero es nulo

para alguno de esos valores, el test ALL devuelve valor nulo. Ejemplo con BDVENTAS: SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ALL (SELECT SUM(CUOTA) FROM EMPLEADOS GROUP BY OFICINA) En este caso se listan las oficinas cuyo objetivo sea superior A TODAS las sumas TEST DE PERTENENCIA A CONJUNTO (IN) • Examina si el valor de la expresión es uno de los valores incluidos en la lista de valores

producida por la subconsulta. • La subconsulta debe generar una única columna y las filas que sean. • Si la subconsulta no produce ninguna fila, el test da falso. Tiene la siguiente sintaxis:

jemplo con BDVENTAS

MBRE, OFICINA

al el este.

Por lo tanto lista los empleados de las oficinas del este

E SELECT NUMEMP, NOFROM EMPLEADOS WHERE OFICINA IN (SELECT OFICINA FROM OFICINAS WHERE REGION = 'ESTE') Con la subconsulta se obtiene la lista de los números de oficina del este y la consulta principobtiene los empleados cuyo número de oficina sea uno de los números de oficina d

SQL SERVER Implementacion Pag.144

Page 145: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EL TEST DE EXISTENCIA EXISTS

• Examina si la subconsulta produce alguna fila de resultados.

• Si la subconsulta contiene filas, el test adopta el valor verdadero, si la subconsulta no contiene ninguna fila, el test toma el valor falso, nunca puede tomar el valor nulo

• Con este test la subconsulta puede tener varias columnas, no importa ya que el test se fija no en los valores devueltos sino en si hay o no fila en la tabla resultado de la subconsulta.

• Cuando se utiliza el test de existencia en la mayoría de los casos habrá que utilizar una referencia externa. Si no se utiliza una referencia externa la subconsulta devuelta siempre será la misma para todas las filas de la consulta principal y en este caso se seleccionan todas las filas de la consulta principal (si la subconsulta genera filas) o ninguna (si la subconsulta no devuelve ninguna fila)

Ejemplo con BDVENTAS SELECT numemp, nombre, oficina FROM empleados WHERE EXISTS (SELECT * FROM oficinas WHERE region = 'este' AND empleados.oficina = oficinas.oficina)

• Este ejemplo obtiene lo mismo que el ejemplo del test IN.Observa que delante de EXISTS no va ningún nombre de columna.

• En la subconsulta se pueden poner las columnas que queramos en la lista de selección (hemos utilizado el *).Hemos añadido una condición adicional al WHERE, la de la referencia externa para que la oficina que se compare sea la oficina del empleado

NOTA. Cuando se trabaja con tablas muy voluminosas el test EXISTS suele dar mejor rendimiento que el test IN.

RESUMEN DEL TEMA Una subconsulta es una sentencia SELECT que aparece en la lista de selección, o en las cláusulas WHERE o HAVING de otra sentencia SELECT.

1. La subconsulta se ejecuta por cada fila de la consulta principal.

2. Dentro de una consulta se puede utilizar una columna del origen de la consulta principal, una referencia externa.

3. Aunque se puedan anidar subconsultas no es aconsejado más de un nivel de anidamiento.

4. La subconsulta sufre una serie de restricciones según el lugar donde se encuentre.

5. Las condiciones asociadas a las subconsultas son las siguientes:

6. el test de comparación con subconsulta el test ANY ,ALL, IN, EXISTS

SQL SERVER Implementacion Pag.145

Page 146: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

MAS EJEMPLOS CON SUBCONSULTAS 1. Mostrar el nombre de la categoria ,el nombre del producto y el precio del producto mas

caro de cada categoria SELECT NOMBRECATEGORÍA, NOMBREPRODUCTO, PRECIOUNIDAD FROM PRODUCTOS INNER JOIN CATEGORÍAS ON PRODUCTOS.IDCATEGORÍA=CATEGORÍAS.IDCATEGORÍA WHERE PRECIOUNIDAD IN (SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS WHERE PRODUCTOS.IDCATEGORÍA=CATEGORÍAS.IDCATEGORÍA) 2. Mostrar la lista de los 3 mejores vendedores en base a su total de pedidos despachados SELECT TOP 3 NOMBRE,APELLIDOS,COUNT(PEDIDOS.IDPEDIDO)AS TOTALPEDIDOS FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO WHERE EMPLEADOS.IDEMPLEADO IN

(SELECT PEDIDOS.IDEMPLEADO FROM PEDIDOS GROUP BY PEDIDOS.IDEMPLEADO)

GROUP BY NOMBRE,APELLIDOS ORDER BY COUNT(PEDIDOS.IDPEDIDO) DESC 3. Mostrar los productos que se hayan vendido con un descuento igual al 25% SELECT * FROM PRODUCTOS WHERE PRECIOUNIDAD ANY(SELECT PRECIOUNIDAD FROM [DETALLES DE PEDIDOS] WHERE DESCUENTO=0.25) 4. Mostrar a los clientes que por lo menos hayan realizado un pedido SELECT CLIENTES.NOMBRECOMPAÑÍA,CLIENTES.TELÉFONO FROM CLIENTES WHERE EXISTS (SELECT FROM PEDIDOS WHERE PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE) 5. Mostrar a los empleados que tengan un salario igual al salario promedio de todos los

empleados SELECT APELLIDOS,NOMBRE,TITULO,SALARIO

SQL SERVER Implementacion Pag.146

Page 147: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI FROM EMPLEADOS AS T1 WHERE SALARIO= (SELECT AVG(SALARIO) FROM EMPLEADOS WHERE T1.TITULO=EMPLEADOS.TITULO) ORDER BY TITULO 6. Obtiene una lista con el nombre,cargo y salario de todos los agentes de ventascuyo

salario es mayor que el de todos los jefes y directores SELECT APELLIDOS,NOMBRE,CARGO,SALARIO FROM EMPLEADOS WHERE CARGO LIKE ‘AGENTE VENT*’ AND SALARIO ALL(SELECT SALARIO

FROM EMPLEADOS WHERE CARGO LIKE ‘JEFE*’) OR CARGO LIKE

‘*DIRECTOR*’)

7. Obtiene una lista de las compañías y los contactos de todos los clientes que han realizado un pedido en el segundo trimestre de 1995 SELECT DISTINCT NOMBRECONTACTO,NOMBRECOMPAÑIA,CARGOCONTACTO,TELEFONO FROM CLIENTES WHERE IDCLIENTE IN(SELECT DISTINCT IDCLIENTE FROM PEDIDOS WHERE FECHAPEDIDO<’07/01/95’)

8. Recupera el codigo del producto y la cantidad y la cantidad pedida de la tabla Detalles de pedidos,extrayendo el nombre del producto de la tabla Productos

SELECT DISTINCT [DETALLES DE PEDIDOS].IDPRODUCTO, [DETALLES DE PEDIDOS].CANTIDAD, (SELECT PRODUCTOS.NOMBREPRODUCTO FROM PRODUCTOS WHERE PRODUCTOS.IDPRODUCTO=[DETALLES DE PEDIDOS].IDPRODUCTO) AS ELPRODUCTO FROM [DETALLES DE PEDIDOS] WHERE [DETALLES DE PEDIDOS].CANTIDAD=15 ORDER BY [DETALLES DE PEDIDOS].IDPRODUCTO 9. Recupera numeros de vuelos y capacidades de aquellos vuelos con destino a madrid y

plazas libres SELECT NUMVUELO,PLAZAS FROM VUELOS WHERE ORIGEN=’MADRID’ AND EXISTS(SELECT T1.NUMVUELO FROM VUELOS AS T1 WHERE T1.PLAZASLIBRES>0 AND T1.NUMVUELO=VUELOS.NUMVUELO)

SQL SERVER Implementacion Pag.147

Page 148: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI SISTEMAS UNI

SQL SERVER Implementacion Pag.148

SQL SERVER Implementacion Pag.148

Page 149: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

USO DE CREATE FUNCTION Microsoft agregó nuevas características a su producto SQL SERVER 2000, y lo más interesante para los programadores del SQL es la posibilidad de hacer funciones definidas por el usuario. La adición de funciones al lenguaje del SQL solucionara los problemas de reutilización del código y dara mayor flexibilidad al programar las consultas de SQL.

TIPOS DE FUNCIONES El servidor 2000 del SQL utiliza estos tipos de funciones:

1. Las funciones escalares, 2. Tabla en linea

Los tres tipos de funciones aceptan parámetros de cualquier tipo. Las funciones escalares devuelven un solo valor, tabla en linea y Multisentencias devuelben un tipo de dato tabla.

I. FUNCIONES ESCALARES Las funciones escalares vuelven un tipo de los datos tal como int, money, varchar, real, etc. Pueden ser utilizadas en cualquier lugar incluso incorporada dentro de sentencias SQL. La sintaxis para una función escalar es la siguiente:

CREATE FUNCTION NombreFuncion ( [@nombreParameter…parameterN]) RETURNS tipoValorRetorno [AS] BEGIN

<instrucciones>

RETURN expresionEscalar END

EJEMPLO:

1. Escriba esto en el analizador de consultas

CREATE FUNCTION SUMA (@VALOR1 INT,@VALOR2 INT) RETURNS INT AS BEGIN RETURN(@VALOR1+@VALOR2) END

2. A continuacion selecciona todo el texto de la funcion y pulsa F5

SQL SERVER Implementacion Pag.149

Page 150: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 3. Para confirmar la creacion de la funcion revise el panel izquierdo del analizador

de consultas en su base de datos SUPERMERCADOSNEPTUNO

4. Probemos la funcion ahora

5. SELECT DBO.SUMA(100,500) AS TOTAL

6. Tambien podemos usarla utilizando una tabla: SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD, DBO.SUMA(PRECIOUNIDAD,10) AS PRECIOINCREMENTADO FROM PRODUCTOS

II. FUNCIONES DE TABLA EN LÍNEA

Las funciones de tabla en linea son las funciones que devuelven la salida de una simple declaración SELECT. La salida se puede utilizar adentro de joins o consultas como si fuera un tabla de estándar. CREATE FUNCTION ClientesPorPais(@Pais varchar(25) ) RETURNS TABLE AS RETURN (SELECT * FROM Clientes WHERE País = @pais)

Creamos la funcion y luego invocaremos a la funcion de esta forma: SELECT * FROM DBO.CLIENTESPORPAIS('ALEMANIA')

SQL SERVER Implementacion Pag.150

Page 151: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ALTER FUNCTION Modifica una función existente definida por el usuario, creada anteriormente por la ejecución de la instrucción CREATE FUNCTION, sin cambiar los permisos y sin que afecte a ninguna otra función, procedimiento almacenado o desencadenador dependientes. EJEMPLO :Modificando la funcion SUMA. Para que acepte valores con decimales vamos a cambiar los tipos INT por FLOAT

ALTER FUNCTION SUMA (@VALOR1 FLOAT,@VALOR2 FLOAT) RETURNS FLOAT AS BEGIN RETURN(@VALOR1+@VALOR2) END

Invocando a la FUNCION SUMA: SELECT DBO.SUMA(12.5,2.7)

EJEMPLOS DE FUNCIONES CREATE FUNCTION EDAD( @FECHANACIMIENTO DATETIME, @FECHAACTUAL DATETIME) RETURNS TINYINT AS BEGIN DECLARE @EDAD TINYINT SET @EDAD=DATEDIFF(YEAR,@FECHANAC,@FECHAACT) RETURN @EDAD END Invocando la funcion :SELECT DBO.EDAD(‘22/09/71’,GETDATE()) CREATE FUNCTION PAGOCUOTA(@MONTO MONEY,@CUOTA INT,@INTERES FLOAT) RETURNS MONEY AS BEGIN DECLARE @PAGOINTERES FLOAT DECLARE @MONTOCUOTA FLOAT SET @INTERES=@MONTO*@INTERES SET @MONTOCUOTA=@MONTO/@CUOTA RETURN (@MONTOCUOTA+@PAGOINTERES) END Invocando la funcion :SELECT DBO.PAGOCUOTA(5000,10,0.06)

CREATE FUNCTION PEDIDOSAÑO(@AÑO AS INTEGER)

SQL SERVER Implementacion Pag.151

Page 152: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI RETURNS TABLE AS RETURN SELECT IDPEDIDO, FECHAPEDIDO, NOMBRECOMPAÑÍA, NOMBRE, APELLIDOS, PEDIDOS.CARGO FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO WHERE YEAR(FECHAPEDIDO)=@AÑO Invocando a la funcion :SELECT * FROM DBO.PEDIDOSAÑO(1995)

ELIMINAR UNA FUNCION Para eliminar una funcion ejecute el comando DROP FUNCTION Ejemplo: DROP FUNCTION DBO.PEDIDOSAÑO

SQL SERVER Implementacion Pag.152

Page 153: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.153

Page 154: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACION DE VISTAS CON CREATE VIEW Una vista es una tabla virtual que está definida por una consulta que consiste en una instrucción SELECT. Esta tabla virtual está creada con datos de una o más tablas reales y, para los usuarios, una vista parece una tabla real. De hecho, una vista puede ser tratada del mismo modo que una tabla normal. Los usuarios pueden hacer referencia a estas tablas virtuales con instrucciones Transact-SQL (T-SQL) del mismo modo que se hace con las tablas. En una vista se pueden realizar las operaciones SELECT, INSERT UPDATE y DELETE. En realidad, una vista se almacena simplemente como una instrucción SQL previamente definida. Cuando se accede a la vista, el optimizador de consultas de SQL Server une la instrucción SQL que se ejecuta en ese momento con la consulta que se use para definir la vista.

EJEMPLO: CREATE VIEW ProductosMasCaros AS BEGIN SELECT TOP 5 NOMBREPRODUCTO,PRECIOUNIDAD,UNIDADESENEXISTENCIA FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC END Invocando la vista: SELECT * FROM ProductosMasCaros

VENTAJAS DE LAS VISTAS

• Una ventaja del uso de las vistas es que éstas siempre ofrecen los datos actualizados. La instrucción SELECT que define una vista sólo se ejecuta cuando se accede a la vista, por tanto, todos los cambios de la tabla subyacente se reflejan en la vista.

• Otra ventaja de usar vistas es que una vista puede tener un nivel diferente de

seguridad del que posea la tabla subyacente. La consulta que define la vista se ejecuta con el nivel de seguridad que posea el usuario que crea la vista. De esta manera, se puede crear una vista que enmascare los datos que no se quieran mostrar a ciertas clases de usuarios.

RESTRICCIONES DE LAS VISTAS

SQL SERVER Implementacion Pag.154

Page 155: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

• SQL Server asigna una serie de restricciones en la creación y el uso de las vistas. Estas restricciones incluyen las siguientes:

• Limitación de columnas: Una vista puede hacer referencia hasta a 1024 columnas de una tabla. Si se necesita hacer referencia a un número mayor de columnas, se tendrán que usar otros métodos.

• Limitación de la base de datos: Solamente se puede crear una vista de una tabla en la

base de datos a la que el creador de la vista está accediendo.

• Limitación de seguridad: El creador de la vista debe tener acceso a todas las columnas a las que se haga referencia en la vista.

• Reglas de integridad de los datos: Cualquier actualización, modificación, etc., que se

haga en la vista, no puede romper las reglas de integridad de los datos. Por ejemplo, si la tabla subyacente de la vista no admite los valores nulos, la vista tampoco los admitirá

• Limitación de niveles en las vistas anidadas: Las vistas se pueden crear sobre otras

vistas (en otras palabras, se puede crear una vista que acceda a otras vistas). Las vistas se pueden anidar hasta 32 niveles.

• Limitación de la orden SELECT: La orden SELECT de una vista no puede contener

una cláusula ORDER BY ni la palabra clave INTO.

MODIFICAR UNA VISTA Utilice el comando ALTER VIEW de la siguiente forma:Cambiamos de la vista anterior el 5 por 10 y ejecutamos de nuevo con el comando ALTER VIEW ALTER VIEW ProductosMasCaros AS BEGIN SELECT TOP 10 NOMBREPRODUCTO,PRECIOUNIDAD,UNIDADESENEXISTENCIA FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC END Invocando a la vista : SELECT * FROM ProductosMasCaros

ELIMINAR UNA VISTA Utilice el comando DROP VIEW para eliminar una vista de la siguiente forma: DROP VIEW ProductosMasCaros

SQL SERVER Implementacion Pag.155

Page 156: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

EJEMPLOS DE VISTAS 1. Mostrar el nombre y precio del producto mas caro de cada categoria

CREATE VIEW MasCaroCategoria AS SELECT NOMBREPRODUCTO,PRECIOUNIDAD,NOMBRECATEGORÍA FROM PRODUCTOS INNER JOIN CATEGORÍAS ON PRODUCTOS.IDCATEGORÍA=CATEGORÍAS.IDCATEGORÍA WHERE PRECIOUNIDAD =(SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS WHERE PRODUCTOS.IDCATEGORÍA=CATEGORÍAS.IDCATEGORÍA)

2. Mostrar a los 3 vendedores que hayan realizado la menor cantidad de ventas en

SUPERMERCADOSNEPTUNO CREATE VIEW LOS3PEORESVENDEDORES AS SELECT TOP 3 NOMBRE,APELLIDOS,COUNT(PEDIDOS.IDPEDIDO)AS TOTAL FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO WHERE EMPLEADOS.IDEMPLEADO IN (SELECT PEDIDOS.IDEMPLEADO FROM PEDIDOS GROUP BY PEDIDOS.IDEMPLEADO HAVING COUNT(PEDIDOS.IDPEDIDO)>100) GROUP BY NOMBRE,APELLIDOS ORDER BY COUNT(PEDIDOS.IDPEDIDO)

SQL SERVER Implementacion Pag.156

Page 157: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

3. Se desea obtener un reporte de los mejores cliente por año para ello utilizaremos 2 vistas la primera nos permitira obtener el total de pedidos por año de cada cliente y la segunda vista nos mostrara el resultado final mostrandonos el mejor cliente de cada año en base a a la mayor cantidad de pedidos comprados en cada año

Primera Vista:

CREATE VIEW TOTALPEDIDOSANUALES

AS

SELECT NOMBRECOMPAÑÍA, YEAR(FECHAPEDIDO) AS AÑO, COUNT(IDPEDIDO) AS TOTAL FROM CLIENTES

INNER JOIN PEDIDOS ON CLIENTES.IDCLIENTE=PEDIDOS.IDCLIENTE

GROUP BY NOMBRECOMPAÑÍA, YEAR(FECHAPEDIDO)

Segunda Vista:

CREATE VIEW MEJORCLIENTEAÑO

AS

SELECT AÑO AS FECHA, NOMBRECOMPAÑÍA, TOTAL

FROM TOTALPEDIDOSANUALES

WHERE STR(AÑO) + STR(TOTAL)

IN (SELECT STR(AÑO) + STR(MAX(TOTAL))

FROM TOTALPEDIDOSANUALES

GROUP BY AÑO )

SQL SERVER Implementacion Pag.157

Page 158: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LAS SENTENCIAS CONDICIONALES

Las sentencias condicionales son aquellas que permiten discriminar entre diversas sentencias, según se cumpla el valor de una expresión lógica. Existen dos tipos de sentencias condicionales. La primera de ellas tiene la siguiente sintaxis: IF expresion_logica sentencia1 [ELSE sentencia2] La sentencia 1 sólo se ejecutará si el resultado de la evaluación de la expresión lógica es verdadera. En otro caso, se ejecutará la sentencia 2, correspondiente a la parte ELSE (opcional). Si se desea especificar un conjunto de sentencias, en lugar de una sola, éstas deberán ir encerradas entre las palabras reservadas BEGIN y END. Si deseamos obtener los títulos almacenados cuando éstos superen las 10 unidades, y el número de ellos cuando no lo superen, ejecutaremos el Código fuente IF (SELECT count(*) FROM Productos) > 10 BEGIN SELECT NombreProducto FROM Productos END ELSE BEGIN SELECT count(*) FROM Productos END En definitiva, la sentencia SELECT NombreProducto FROM Productos sólo se ejecuta cuando se cumple la condición (SELECT count (*) FROM Productos) > 10. En otro caso, se ejecutará la rama ELSE, que devuelve el número de títulos almacenados en la tabla titles. La anterior sentencia compara la expresión 1, con el resto de expresiones especificadas a continuación de la palabra reservada WHEN. Si alguna de estas expresiones se cumple, se devolverá el resultado correspondiente especificado a continuación de la palabra reservada THEN. Si llegados al final, no ha verificado ninguna de las expresiones, se devolverá el resultado especificado a continuación del ELSE. Por ejemplo, si queremos saber el nombre de los estados de los clientes, en lugar de las iniciales, podemos ejecutar el Código fuente SELECT NombreCompañía, CASE Ciudad WHEN 'CA' THEN 'California' WHEN 'KS' THEN 'Kansas' WHEN 'TN' THEN 'Tennessee' WHEN 'OR' THEN 'Oregon' WHEN 'MI' THEN 'Michigan' WHEN 'IN' THEN 'Indiana' WHEN 'MD' THEN 'Maryland' WHEN 'UT' THEN 'Utah' END AS NombreCiudad FROM Clientes ORDER BY NombreCompañía En este caso se comprueba el valor del atributo Ciudad, y si este es igual a CA, se devolverá California, si es OR se devolverá Oregon, y en otro caso se devolverá el literal 'Otro'.

SQL SERVER Implementacion Pag.158

Page 159: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SENTENCIAS ITERATIVAS Una sentencia iterativa es aquella que permite ejecutar una o varias sentencias de manera repetida, mientras se cumpla una condición lógica. La sentencia que permite realizarlo es WHILE, y su sintaxis WHILE expresion_logica Sentencia [BREAK] [CONTINUE] La sentencia especificada se ejecuta de forma iterativa, mientras se cumpla la expresión lógica. La cláusula BREAK, permite romper el bucle, y abandonarlo, aunque se cumpla la expresión lógica, mientras que CONTINUE permite ejecutar de nuevo las sentencias desde el comienzo del bucle, ignorando aquellas que vienen a continuación del CONTINUE. EJEMPLO En este ejemplo, si el promedio de precio es menor de 30 $, el bucle WHILE dobla los precios y, a continuación, selecciona el precio máximo. Si el precio máximo es menor o igual que 50 $, el bucle WHILE se reinicia y dobla los precios de nuevo. Este bucle continúa la duplicación de precios hasta que el precio máximo sea mayor que 50 $ y, a continuación, sale del bucle WHILE e imprime un mensaje

WHILE (SELECT AVG(PrecioUnidad) FROM Productos) < $30 BEGIN UPDATE Productos SET PrecioUnidad = PrecioUnidad * 2 SELECT MAX(PrecioUnidad) FROM Productos IF (SELECT MAX(PrecioUnidad) FROM Productos) > $50 BREAK ELSE CONTINUE END PRINT '!!!Registros actualizados con exito!!!'

SQL SERVER Implementacion Pag.159

Page 160: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.160

Page 161: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

PROCEDIMIENTOS ALMACENADOS Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor. Los procedimientos almacenados de SQL Server, son más potentes, porque permiten almacenar funciones y procedimientos compuestos por varias instrucciones, introducir saltos, bucles, etc. También se pueden compilar procedimiento escritos en lenguaje C, para ampliar su potencia modularmente. Por ejemplo, podemos crear un procedimiento para recuperar el nombre de un Cliente, cuyo código se pasa por parámetro. CREATE PROCEDURE ObtenerNombre @IDCLIENTE varchar(11) AS SELECT NOMBRECOMPAÑíA FROM CLIENTES WHERE IDCLIENTE = @IDCLIENTE Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al que se le pasa un parámetro, llamado @idcliente, de tipo varchar(11), que realiza una consulta para obtener el nombre de la tabla clientes, cuyo código coincida con el parámetro. De esta forma, si queremos obtener el nombre del cliente cuyo código sea 'anton', deberemos ejecutar el procedimiento pasándole como argumento este valor: Las llamadas a procedimientos almacenados se pueden realizar de las siguientes formas: Pasando los argumentos en el mismo orden que en el que se han declarado. Exec ObtenerNombre 'anton' esta sentencia produce la siguiente la salida: Pasando los argumentos nombrados. En este caso no hace falta que los parámetros vayan en el mismo orden. OBTENERNOMBRE @AU_ID = 'ANTON' Ejemplo 2: CREATE PROCEDURE LISTARPEDIDOS ( @IDCLIENTE VARCHAR(7), @FECHAINICIAL SMALLDATETIME, @FECHAFINAL SMALLDATETIME ) AS SELECT PEDIDOS.IDPEDIDO,CLIENTES.NOMBRECOMPAÑÍA,EMPLEADOS.NOMBRE + EMPLEADOS.APELLIDOS AS EMPLEADO,PEDIDOS.CARGO,PEDIDOS.FECHAPEDIDO, PEDIDOS.FECHAENVIO,PEDIDOS.FECHAENTREGA FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO WHERE PEDIDOS.IDCLIENTE=@IDCLIENTE AND FECHAPEDIDO

SQL SERVER Implementacion Pag.161

Page 162: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI BETWEEN @FECHAINICIAL AND @FECHAFINAL Ejecutando el procedimiento almacenado EXEC LISTARPEDIDOS 'ANTON','12/05/95','22/12/96'

PARÁMETROS POR REFERENCIA Si ejecutamos las anteriores sentencias, obtendremos el resultado directamente en la ventana que tengamos abierta en SQL Server. Pero ¿Que pasa si queremos obtener un parámetro de salida, como resultado de la ejecución del procedimiento?. La solución para este caso es utilizar la palabra reservada OUTPUT para los argumentos de salida. Si por ejemplo, queremos obtener el número de clientes y el número de productos que tenemos en la base de datos, crearemos el procedimiento almacenado que muestra el Código fuente. CREATE PROCEDURE num_clientes_productos @clientes int OUTPUT, @Productos int OUTPUT AS SELECT * FROM clientes SELECT @clientes = @@ROWCOUNT SELECT * FROM productos SELECT @productos = @@ROWCOUNT RETURN (0) Vamos a estudiar el anterior ejemplo. Básicamente es similar al anterior. Detrás de la palabra reservada PROCEDURE damos el nombre del procedimiento almacenado, y a continuación proporcionamos los parámetros, junto con su tipo (que en este caso es entero), y diremos sin éstos son de salida, en cuyo caso especificamos la palabra reservada OUTPUT a continuación. Tras la palabra reservada AS se codifica el cuerpo del procedimiento. Primero contamos todas las filas de la tabla clientes, realizando un SELECT * FROM clientes. A continuación devolvemos en el parámetro @clientes el valor obtenido, utilizando @@ROWCOUNT. Acto seguido se realiza lo mismo para la tabla Productos. Nótese como la forma de asignar un valor a un atributo es mediante una sentencia SELECT, igualando el parámetro al valor. La función @@ROWCOUNT devuelve el número de filas que se han seleccionado. Es equivalente a la sentencia que aparece en el Código fuente SELECT COUNT(*) FROM Productos Se podría sustituir por Código fuente CREATE PROCEDURE num_clientes_productos @clientes int OUTPUT, @clientes int OUTPUT AS SELECT @clientes = (SELECT COUNT(*) FROM clientes)

SQL SERVER Implementacion Pag.162

Page 163: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI SELECT @productos = (SELECT COUNT(*) FROM Productos) RETURN (0) Para ejecutar el anterior procedimiento, seguiremos los siguientes pasos: Declarar las variables que vamos a utilizar para llamar al procedimiento. La sintaxis para declarar una variable es utilizar la palabra reservada DECLARE, seguido del nombre de la variable y el tipo. DECLARE @num_clientes int DECLARE @num_Productos int Ejecutar el procedimiento. La sintaxis es utilizar la palabra reservada EXEC, seguida del nombre del procedimiento, y los parámetros, separados por comas, especificando si son de retorno. EXEC num_clientes_productos @num_clientes OUTPUT, @num_productos OUTPUT Mostrar los resultados SELECT clientes = @num_clientes, productos = @num_productos Tras ejecutar las anteriores sentencias, obtendremos como resultado el siguiente listado:

EXECUTE Ejecuta una función definida por el usuario que devuelve valores escalares, un procedimiento del sistema, un procedimiento almacenado definido por el usuario o un procedimiento almacenado extendido. Admite también la ejecución de una cadena de caracteres. Ejemplo:

DECLARE @TABLE VARCHAR(25)

SET @TABLE='CLIENTES'

EXEC ('SELECT * FROM ' + @TABLE)

MODIFICAR UN PROCEDIMIENTO ALMACENADO Si queremos modificar un procedimiento almacenado, ejecutaremos la sentencia ALTER PROCEDURE, seguido del nombre del procedimiento. Por ejemplo, si queremos hacer cambios el procedimiento almacenado, creado en el anterior ejemplo, escribiremos el Código fuente ALTER PROCEDURE num_clientes_productos @clientes int OUTPUT, @productos int OUTPUT AS SELECT @clientes = (SELECT COUNT(*) FROM clientes where pais=’alemania’)

SQL SERVER Implementacion Pag.163

Page 164: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI SELECT @productos = (SELECT COUNT(*) FROM productos where preciounidad>10) RETURN (0)

ELIMINAR UN PROCEDIMIENTO ALMACENADO Si queremos borrar un procedimiento almacenado, ejecutaremos la sentencia DROP PROCEDURE, seguido del nombre del procedimiento. Por ejemplo, si queremos borrar el procedimiento almacenado, creado en el anterior ejemplo, escribiremos el Código fuente DROP PROCEDURE num_clientes_clientes

EJEMPLOS DE PROCEDIMIENTOS ALMACENADOS Utilizar EXECUTE con DEFAULT El ejemplo siguiente crea un procedimiento almacenado con un valor predeterminado para su parametro. Cuando se ejecuta el procedimiento,el valor predeterminado se insertan como parámetro si no se pasa ningún valor en la llamada o si se especifica el valor predeterminado. CREATE PROCEDURE LISTARCLIENTES(@PAIS VARCHAR(25) ='ARGENTINA') AS SELECT IDCLIENTE,NOMBRECOMPAÑÍA,DIRECCIÓN,PAÍS FROM CLIENTES WHERE PAÍS=@PAIS Observe las distintas formas en las que se puede utilizar la palabra clave DEFAULT Sino se especifica el valor del parametro se asume entonces el valor por defecto es decir se tomara entonces el valor “ARGENTINA” EXEC LISTARCLIENTES DEFAULT

PROCEDIMIENTOS ALMACENADOS DE SISTEMA SQL Server nos ofrece una serie de procedimientos almacenados ya implementados, es decir, listos para ejecutar, cada uno con su propio objetivo o fin. Por ejemplo, si deseamos saber los usuarios conectados a nuestro sistema, podemos elaborar una consulta SELECT sobre la tabla de sistema que contiene los usuarios conectados, o ejecutar el procedimiento almacenado sp_who. Así, si escribimos sp_who, obtendremos una lista con todos los usuarios conectados, Si queremos obtener una lista con todas las tablas del sistema, disponemos de otro procedimiento almacenado denominado sp_tables. Del mismo modo, si deseamos conocer

SQL SERVER Implementacion Pag.164

Page 165: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI todos los atributos de una tabla, deberemos ejecutar sp_columns seguido del nombre de la tabla. Por ejemplo, para listar los atributos de la tabla Categorias ejecutamos sp_columns Categorias, y obtenemos el resultado de la Figura

UTILIZAR EXECUTE CON UN PROCEDIMIENTO ALMACENADO EXTENDIDO El ejemplo siguiente utiliza el procedimiento almacenado extendido XP_CMDSHELL para Enumerar un directorio de todos los archivos con una extensión de nombre de archivo .exe.

XP_CMDSHELL Ejecuta una cadena de comandos como comando del sistema operativo y devuelve el resultado como filas de texto. USE MASTER EXECUTE XP_CMDSHELL 'DIR C: *.EXE'

SQL SERVER Implementacion Pag.165

Page 166: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

UTILIZAR COMANDOS DE RED DE WINDOWS NT Este ejemplo muestra el uso de xp_cmdshell en un procedimiento almacenado. Este ejemplo notifica a los usuarios (con net send) que se va a cerrar SQL Server, detiene el servidor (con net pause) y, después, apaga el servidor (con net stop).

CREATE PROCEDURE APAGADO10 AS EXEC xp_cmdshell net send /domain:SQL_USERS ''SQL Server shutting down in 10 minutes. No more connections allowed.', no_output EXEC xp_cmdshell 'net pause sqlserver' WAITFOR DELAY '00:05:00' EXEC xp_cmdshell 'net send /domain: SQL_USERS ''SQL Server shutting down in 5 minutes.', no_output WAITFOR DELAY '00:04:00' EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down in 1 minute. Log off now.', no_output WAITFOR DELAY '00:01:00' EXEC xp_cmdshell 'net stop sqlserver', no_output Existe una gran variedad de procedimientos almacenados, como por ejemplo para crear dispositivos, para comprobar el espacio usado por una tabla, etc. Aquí sólo hemos visto dos ejemplos de aplicación.

MAS EJEMPLOS 1. Este procedimiento permite insertar un registro a la tabla empleados pero antes verifica si existe algun empleado con el mismo nombre y apellido en ese caso lo rechaza no se toma en cuenta el campo idempleado porque es autonumerico CREATE PROCEDURE INSERTAEMPLEADO( @NOMBRE VARCHAR(50), @APELLIDOS VARCHAR(50), @CARGO VARCHAR(25), @FECHACONTRATACION SMALLDATETIME, @FECHANACIMIENTO SMALLDATETIME, @DIRECCION VARCHAR(50), @CIUDAD VARCHAR(50), @PAIS VARCHAR(50), @FONO VARCHAR(7)) AS IF (SELECT COUNT(*) FROM EMPLEADOS WHERE APELLIDOS=@APELLIDOS AND NOMBRE=@NOMBRE)>0 BEGIN PRINT ‘EL EMPLEADO CON ESE NOMBRE YA EXISTE’ END ELSE BEGIN INSERT INTO EMPLEADOS(APELLIDOS,NOMBRE,CARGO,FECHANACIMIENTO,FECHACONTRATACIÓN,DIRECCION, CIUDAD,PAÍS,FONO) VALUES(@APELLIDOS,@NOMBRE,@CARGO,@FECHANACIMIENTO,@FECHACONTRATACION,@DIRECCION,@CIUDAD, @PAIS,@FONO) END GO EXECUTE INSERTAEMPLEADO ‘CHAVEZ VIERA’,’HENRY’,’DOCENTE’,’22/09/71’,’23/09/98’,’JR.NAPOLES 300 URB.FIORI SMP’,’LIMA’,’PERU’,’5340806’

SQL SERVER Implementacion Pag.166

Page 167: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 2. Procedimiento que permite borrar un empleado especificando su idempleado para eliminarlo CREATE PROCEDURE ELIMINAEMPLEADO(@IDEMPLEADO INT) AS DELETE FROM EMPLEADOS WHERE IDEMPLEADO=@IDEMPLEADO Go EXEC ELIMINAEMPLEADO 2 4. Procedimiento que permite visualizar los detalles de un pedido espècificando el numero

de pedido ALTER PROCEDURE VERDETALLES @NUMPED INT AS SELECT [DETALLES DE PEDIDOS].IDPEDIDO,PRODUCTOS.NOMBREPRODUCTO,[DETALLES DE PEDIDOS].PRECIOUNIDAD, [DETALLES DE PEDIDOS].CANTIDAD, CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON PRODUCTOS.IDPRODUCTO=[DETALLES DE PEDIDOS].IDPRODUCTO WHERE [DETALLES DE PEDIDOS].IDPEDIDO=@NUMPED GO EXEC VERDETALLES 10248 CREATE PROCEDURE INSERTADETALLE @IDPEDIDO INT, @IDPRODUCTO INT, @CANT INT, @PRECIO MONEY, @DESC REAL AS SET NOCOUNT ON IF NOT EXISTS(SELECT * FROM PEDIDOS WHERE IDPEDIDO=@IDPEDIDO) BEGIN PRINT 'NO EXISTE EL NUMERO DE PEDIDO PARA EL DETALLE DE PEDIDO ESPECIFICADO' END ELSE BEGIN INSERT INTO [DETALLES DE PEDIDOS] VALUES(@IDPEDIDO,@IDPRODUCTO,@PRECIO,@CANT,@DESC) PRINT 'SE HA INSERTADO EL DETALLE DE PEDIDO' UPDATE PRODUCTOS SET UNIDADESENEXISTENCIA=UNIDADESENEXISTENCIA-1 PRINT 'SE HA DESCARGADO EL STOCK’ END

SQL SERVER Implementacion Pag.167

Page 168: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

LAS TRANSACCIONES EN SQL SERVER Entre las habilidades de todo Sistema Gestor de Bases de Datos Relaciones tiene que estar la de permitir al programador crear transacciones. El SQL Server nos permite trabajar con transacciones de manera sencilla y eficaz. Una transacción es un conjunto de operaciones que van a ser tratadas como una única unidad. La transacción más simple en SQL Server es una única sentencia SQL. Por ejemplo una sentencia como esta: UPDATE PRODUCTOS SET PRECIOUNIDAD=20 WHERE NOMBREPRODUCTO =’QUESO LAIVE’ Esta es una transacción ‘autocommit’, una transacción autocompletada. Cuando enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones lo que va a ocurrir y a continuación realiza los cambios necesarios en la base de datos. Si hay algún tipo de problema al hacer esta operación el SQL Server puede leer en el fichero de transacciones lo que se estaba haciendo y si es necesario puede devolver la base de datos al estado en el que se encontraba antes de recibir la sentencia. Por supuesto este tipo de transacciones no requieren de nuestra intervención puesto que el sistema se encarga de todo. Sin embargo si hay que realizar varias operaciones y queremos que sean tratadas como una unidad tenemos que crear esas transacciones de manera explícita. La sentencia que se utiliza para indicar el comienzo de una transacción es ‘BEGIN TRAN’. Si alguna de las operaciones de una transacción falla hay que deshacer la transacción en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar. Esto se consigue con la sentencia ‘ROLLBACK TRAN’. Si todas las operaciones de una transacción se completan con éxito hay que marcar el fin de una transacción para que la base de datos vuelva a estar en un estado consistente con la sentencia ‘COMMIT TRAN’. Un ejemplo Trabajaremos con la base de datos SUPERMERCADOSNEPTUNO en nuestros ejemplos.Vamos a realizar una transacción que modifica el precio de dos productos de la base de datos. USE SUPERMERCADOSNEPTUNO DECLARE @Error int --Declaramos una variable que utilizaremos para almacenar un posible código de error BEGIN TRAN --Iniciamos la transacción UPDATE Productos SET PrecioUnidad=2.5 WHERE NombreProducto =’Queso de cabra’ --Ejecutamos la primera sentencia SET @Error=@@ERROR --Si ocurre un error almacenamos su código en @Error --y saltamos al trozo de código que deshara la transacción. Si, eso de ahí es un --GOTO, el demonio de los programadores, pero no pasa nada por usarlo --cuando es necesario IF (@Error<>0) GOTO TratarError --Si la primera sentencia se ejecuta con éxito, pasamos a la segunda UPDATE Productos SET PrecioUnidad=2.5 WHERE NombreProducto=’Queso de cabra’ SET @Error=@@ERROR

SQL SERVER Implementacion Pag.168

Page 169: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI --Y si hay un error hacemos como antes IF (@Error<>0) GOTO TratarError --Si llegamos hasta aquí es que los dos UPDATE se han completado con --éxito y podemos “guardar” la transacción en la base de datos COMMIT TRAN TratarError: --Si ha ocurrido algún error llegamos hasta aquí If @@Error<>0 THEN BEGIN PRINT ‘Ha ecorrido un error. Abortamos la transacción’ --Se lo comunicamos al usuario y deshacemos la transacción --todo volverá a estar como si nada hubiera ocurrido ROLLBACK TRAN END Como se puede ver para cada sentencia que se ejecuta miramos si se ha producido o no un error, y si detectamos un error ejecutamos el bloque de código que deshace la transacción. Hay una interpretación incorrecta en cuanto al funcionamiento de las transacciones que esta bastante extendida. Mucha gente cree que si tenemos varias sentencias dentro de una transacción y una de ellas falla, la transacción se aborta en su totalidad. ¡Nada más lejos de la realidad! Si tenemos dos sentencias dentro de una transacción. USE SUPERMERCADOSNEPTUNO BEGIN TRAN UPDATE PRODUCTOS SET PRECIOUNIDAD=2.5 WHERE NOMBREPRODUCTO=’QUESO CABRA’ UPDATE PRODUCTOS SET PRECIOUNIDAD=2.5 WHERE NOMBREPRODUCTO=’QUESO CABRA’ COMMIT TRAN Estas dos sentencias se ejecutarán como una sola. Si por ejemplo en medio de la transacción (después del primer update y antes del segundo) hay un corte de electricidad, cuando el SQL Server se recupere se encontrará en medio de una transacción y, o bien la termina o bien la deshace, pero no se quedará a medias.El error está en pensar que si la ejecución de la primera sentencia da un error se cancelará la transacción. El SQL Server sólo se preocupa de ejecutar las sentencias, no de averiguar si lo hacen correctamente o si la lógica de la transacción es correcta. Eso es cosa nuestra. Por eso en el ejemplo que tenemos más arriba para cada sentencia de nuestro conjunto averiguamos si se ha producido un error y si es así actuamos en consecuencia cancelando toda la operación. CREATE PROCEDURE INSERTADETALLE @IDPEDIDO INT, @IDPRODUCTO INT, @CANT INT, @PRECIO MONEY AS DECLARE @ERROR INT SET NOCOUNT ON IF NOT EXISTS(SELECT * FROM PEDIDOS WHERE IDPEDIDO=@IDPEDIDO) PRINT 'NO EXISTE EL NUMERO DE PEDIDO PARA EL DETALLE DE PEDIDO ESPECIFICADO' ELSE BEGIN BEGIN TRANSACTION INSERT INTO [DETALLES DE PEDIDOS](IDPEDIDO,IDPRODUCTO,PRECIOUNIDAD,CANTIDAD) VALUES(@IDPEDIDO,@IDPRODUCTO,@PRECIO,@CANT) PRINT 'SE HA INSERTADO EL DETALLE DE PEDIDO' SET @ERROR=@@ERROR IF (@ERROR<>0) GOTO TRATARERROR UPDATE PRODUCTOS SET UNIDADESENEXISTENCIA=UNIDADESENEXISTENCIA-@CANT

SQL SERVER Implementacion Pag.169

Page 170: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI PRINT 'SE HA DESCARGADO EL STOCK' SET @ERROR=@@ERROR IF (@ERROR<>0) GOTO TRATARERROR COMMIT TRANSACTION TRATARERROR: IF (@@ERROR<>0) BEGIN PRINT 'NO ES POSIBLE LA ACTUALIZACION' ROLLBACK TRANSACTION END END GO INSERTADETALLE 20572,2,10,3

SQL SERVER Implementacion Pag.170

Page 171: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.171

Page 172: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREACION DE TRIGGERS Los disparadores de procedimiento, más comúnmente conocidos como triggers, son una especie de procedimientos almacenados, a diferencia que se ejecutan cuando ocurre un evento sobre alguna tabla. Entendemos por evento, cualquier acción del tipo:

• INSERCIÓN • BORRADO • ACTUALIZACIÓN

La sintaxis de la sentencia de creación de triggers es la siguiente: CREATE TRIGGER nombre ON tabla FOR accion AS codigo Donde acción especifica el evento que debe ocurrir para que se dispare el trigger, y que puede ser:

• UPDATE: actualización. • INSERT: inserción. • DELETE: borrado.

Por ejemplo, si queremos crear un trigger llamado modificación_cliente, sobre la tabla Authors, que muestre un mensaje cada vez que se actualiza una fila de la tabla, deberemos escribir el Código fuente CREATE TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Han actualizado la tabla Pedidos" Para comprobar el funcionamiento de este trigger, podemos actualizar cualquier fila de la tabla de clientes, por ejemplo con la sentencia que aparece en el Código fuente UPDATE clientes SET nombre = 'Antonio Moreno' WHERE idcliente = 'anton' Con esto conseguimos dos cosas, actualizar el nombre del cliente cuyo código es el especificado a Miguel, y obtener el mensaje que se muestra como ejecución del trigger de actualización. Sin embargo, los triggers en SQL Server tienen una serie de limitaciones:

1. No se puede disparar un trigger dentro de otro trigger, ya que daría lugar a un bucle infinito

2. Por esta razón, un trigger no puede ejecutar instrucciones DDL (lenguaje de definición

de datos)

3. No se pueden ejecutar sentencias como SELECT INTO o de creación de dispositivos dentro de un trigger

SQL SERVER Implementacion Pag.172

Page 173: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

ELIMINAR UN TRIGGER Para borrar un trigger, deberemos ejecutar la sentencia DROP TRIGGER Por ejemplo, si queremos borrar el trigger anteriormente creado, ejecutaremos el Código fuente DROP TRIGGER modificacion_cliente

MODIFICAR UN TRIGGER Para modificar un trigger, deberemos ejecutar la sentencia ALTER TRIGGER Por ejemplo, si queremos modificar el trigger anteriormente creado, ejecutaremos el Código fuente ALTER TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Los registros de la tabla Pedidos han sido actualizados" Como ya se ha comentado, los triggers o desencadenadores son una especie de procedimientos almacenados, que se ejecutan cuando ocurre una acción dentro de la base de datos. Así, si por ejemplo se ejecuta una inserción, una actualización, o un borrado de una tabla, se ejecutarían las sentencias definidas para el trigger en concreto de esa tabla específica. Recordamos cual es su sintaxis: CREATE TRIGGER nombre ON tabla FOR [DELETE | INSERT | UPDATE] AS Sentencias Las palabras reservadas DELETE, INSERT y UPDATE corresponden a cada una de las acciones para las cuales se puede definir un desencadenador dentro de la tabla especificada. El bloque de sentencias permite prácticamente cualquier tipo de ellas dentro del lenguaje T-SQL, pero con ciertas limitaciones. Por ejemplo, no se podrá utilizar la sentencia select, ya que un trigger no puede devolver datos al usuario, sino que simplemente se ejecuta para cambiar o comprobar los datos que se van a insertar, actualizar o borrar.

LAS TABLAS DELETED E INSERTED Dentro de la definición de un trigger, podemos hacer referencia a un par de tablas lógicas, cuya estructura es similar a la tabla donde se esta ejecutando el trigger; es decir, es una copia de la tabla en la cual se van a insertar o borrar los datos, y que contiene, precisamente, los datos que van a ser añadidos o borrados.

SQL SERVER Implementacion Pag.173

Page 174: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI La utilidad de estas dos tablas es la de realizar comprobaciones entre los datos antiguos y los nuevos.Así, por ejemplo, si queremos recuperar los datos de la tabla que estamos borrando, dentro del trigger,se deberá ejecutar el siguiente código: SELECT * FROM DELETED

TIPOS DE DESENCADENADORES SQL-Server permite la definición de varios tipos de triggers, entre los cuales cabe destacar los siguientes:

• DESENCADENADORES MÚLTIPLES: Para una misma tabla, se pueden definir distintos triggers para la misma acción, es decir, si definimos un trigger para insert, y resulta que dicha tabla ya tenía definido un trigger para esa misma acción, se ejecutarán ambos triggers cuando ocurra dicho evento sobre la tabla.

• DESENCADENADORES RECURSIVOS:

Se permite la recursividad entre las llamadas a los triggers, es decir, un trigger puede llamar a su vez a otro, bien de forma directa, bien de forma indirecta.

• DESENCADENADORES ANIDADOS:

si un trigger cambia una tabla en la que se encuentra definido otro trigger, se provoca la llamada de este último que, si a su vez vuelve a modificar otra tabla, puede provocar la ejecución de otro trigger, y así sucesivamente. Si se supera el nivel de anidamiento permitido, se cancelará la ejecución de los triggers.

LIMITACIONES DE LOS TRIGGERS Aunque ya se han comentado algunas de las limitaciones a la hora de programar triggers, veamos en detalle las restricciones que implica la definición de triggers:

• Un trigger sólo se puede aplicar a una tabla • Aunque un trigger se defina dentro una sola base de datos, puede hacer referencia a

objetos que se encuentran fuera de la misma • La misma acción del desencadenador puede utilizarse para definir más de un trigger

sobre la misma tabla • La opción SET elegida dentro de la ejecución de un desencadenador, volverá a su

estado previamente definido una vez concluya la ejecución del mismo

• Así mismo, no se permite la utilización de las sentencias del DDL dentro de la definición de un trigger En una vista no se puede utilizar un desencadenador

RESOLUCIÓN DIFERIDA DE NOMBRES La resolución diferida de nombres es una utilidad que permite escribir triggers que hagan referencia a tablas que no existen en el momento de la compilación. Por ejemplo, el siguiente código hace referencia a una tabla x, que no existe en el momento de escribir el trigger. CREATE TRIGGER TRIGGER1 ON AUTHORS FOR INSERT, UPDATE, DELETE AS SELECT A.NOMBRE, A.APELLIDOS

SQL SERVER Implementacion Pag.174

Page 175: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI FROM CLIENTES A INNER JOIN X ON A.IDCLIENTE = X.IDCLIENTE

EJEMPLOS 1. Veamos a continuación algunos ejemplos que complementen lo visto hasta ahora. El siguiente código, muestra la forma de enviar un mensaje de correo electrónico a una persona, cuando se añade una nueva oferta. CREATE TRIGGER ENVIAR_CORREO ON OFERTA FOR INSERT AS EXEC MASTER..XP_SENDMAIL 'PEPE','Tenemos una nueva oferta en nuestra base de datos' GO 2. Sin embargo, si queremos que se envíe el mensaje cada vez que se cambia algo en la tabla de ofertas, deberemos reescribir el trigger para las acciones update y delete, como se muestra en el siguiente código. DROP TRIGGER ENVIAR_CORREO GO CREATE TRIGGER ENVIAR_CORREO ON OFERTA FOR INSERT, UPDATE, DELETE AS EXEC MASTER..XP_SENDMAIL 'PEPE','LA TABLA DE OFERTAS HA CAMBIADO' GO CREATE TRIGGER TR_ACTUALIZASTOCK ON [DETALLES DE PEDIDOS] FOR INSERT AS BEGIN DECLARE @IDPROD INT DECLARE @CANTIDAD INT DECLARE @STOCK INT SET @IDPROD=(SELECT IDPRODUCTO FROM INSERTED) SET @CANTIDAD=(SELECT CANTIDAD FROM INSERTED) SET @STOCK= (SELECT STOCK FROM PRODUCTOS WHERE IDPRODUCTO=@IDPROD) IF @STOCK>@CANTIDAD BEGIN UPDATE PRODUCTOS SET STOCK=STOCK-@CANTIDAD WHERE IDPRODUCTO=@IDPROD PRINT 'SE DESCARGO EL STOCK' END ELSE BEGIN ROLLBACK PRINT 'LA CANTIDAD DEBE SER MENOR AL STOCK' ENDEND

SQL SERVER Implementacion Pag.175

Page 176: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

3. Crear un trigger que no permita registrar un detalle de pedido con un idpedido que no exista en la tabla pedidos CREATE TRIGGER VALIDADETALLE ON DETALLES FOR INSERT AS BEGIN DECLARE @IDPEDIDO INT SET @IDPEDIDO= ISNULL((SELECT IDPEDIDO FROM PEDIDOS WHERE IDPEDIDO=(SELECT IDPEDIDO FROM INSERTED)),0) IF @IDPEDIDO=0 BEGIN PRINT 'NO SE PUEDE INSERTAR UN PEDIDO' ROLLBACK END END 4. Crear un triger ue no permita la venta de condimentos CREATE TRIGGER PROHIBECONDIMENTOS ON [DETALLES DE PEDIDOS] FOR INSERT AS BEGIN DECLARE @COD INT DECLARE @EXISTE INT SET @COD=(SELECT C.IDCATEGORÍA FROM CATEGORÍAS C WHERE C.NOMBRECATEGORÍA LIKE 'CONDIMENTO%') SET @EXISTE=ISNULL(( SELECT IDPRODUCTO FROM PRODUCTOS WHERE IDCATEGORÍA=@COD AND IDPRODUCTO= (SELECT IDPRODUCTO FROM INSERTED) ),0) IF @EXISTE<>0 BEGIN PRINT 'NO SE PUEDE VENDER UN CONDIMENTO ESTA SUSPENDIDO' ROLLBACK END END

DESHABILITAR UN TRIGGER Para DESHABILITAR un triger se hace de la siguiente manera ALTER TABLE DETALLES DISABLE TRIGGER PROHIBECONDIMENTOS Para HABILITAR un triger se hace de la siguiente manera ALTER TABLE DETALLES ENABLE TRIGGER PROHIBECONDIMENTOS

SQL SERVER Implementacion Pag.176

Page 177: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.177

Page 178: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CURSORES EN SQL SERVER Todas las instrucciones SQL operan sobre un conjunto de filas. Una instrucción SELECT devuelve un conjunto completo de resultados que contiene todas las filas que cumplen los requisitos incluidos en la instrucción SELECT. Las aplicaciones necesitan procesar el conjunto de resultados de una fila o bloque de filas de una vez. Los cursores son una extensión lógica para conjuntos de resultados que permiten a las aplicaciones trabajar con el conjunto de resultados fila por fila.

Microsoft SQL Server 2000 admite varios mecanismos para especificar cursores:

• Transact-SQL admite las instrucciones DECLARE CURSOR, OPEN, FETCH y CLOSE para administrar cursores. Transact-SQL también admite extensiones como:

• Una instrucción DEALLOCATE para permitir optimizaciones al volver a utilizar cursores.

• Definir una variable Transact-SQL de forma que contenga un tipo de datos cursor y utilizarla para hacer referencia a un cursor.

• Definir un cursor para que tenga alcance local o global.

• Especificar los tipos de cursores de las especificaciones OLE DB y ODBC (FORWARD_ONLY, STATIC, KEYSET y DYNAMIC) en una instrucción DECLARE CURSOR.

FORWARD_ONLY Especifica que el cursor sólo se puede desplazar desde la primera a la última fila. FETCH NEXT es la única opción de recuperación aceptada. Si se especifica FORWARD_ONLY sin las palabras clave STATIC, KEYSET o DYNAMIC, el cursor funciona como un cursor DYNAMIC. Cuando no se especifica FORWARD_ONLY ni tampoco SCROLL, FORWARD_ONLY es la opción predeterminada

STATIC 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 reflejarán en los datos obtenidos en las recuperaciones realizadas en el cursor y además este cursor no admite modificaciones.

KEYSET Especifica que la pertenencia y el orden de las filas del cursor se fijan al abrir éste. El conjunto de claves que identifica de forma única las filas está integrado en una tabla de tempdb conocida como KEYSET. Los cambios en valores que no sean claves de las tablas base, ya sean realizados por el propietario del cursor o confirmados por otros usuarios, son visibles cuando el propietario se desplaza por el cursor. Las inserciones realizadas por otros usuarios no son visibles (no es posible hacer inserciones a través de un cursor de servidor Transact-SQL). Si se elimina una fila, el intento de recuperarla obtendrá un valor de -2 en @@FETCH_STATUS. Las actualizaciones de los valores de claves desde fuera del cursor se asemejan a la eliminación de la fila antigua seguida de la inserción de la nueva. La fila con los

SQL SERVER Implementacion Pag.178

Page 179: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI nuevos valores no es visible y los intentos de recuperar la de los valores antiguos devuelven el valor -2 en @@FETCH_STATUS. Los nuevos valores son visibles si la actualización se realiza a través del cursor, al especificar la cláusula WHERE CURRENT OF.

DYNAMIC Define un cursor que, al desplazarse por él, refleja en su conjunto de resultados todos los cambios realizados en los datos de las filas.

EJEMPLOS CURSORES El conjunto de resultados generado al abrir este cursor contiene todas las filas y todas las columnas de la tabla EMPLEADOS de la base de datos SUPERMERCADOSNEPTUNO. 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 recuperación disponible debido a que no se ha especificado la opción SCROLL. DECLARE CUR_CLIENTES CURSOR FOR SELECT * FROM CLIENTES OPEN CUR_CLIENTES FETCH NEXT FROM CUR_CLIENTES

Para desplazarse de registro en registro ejecute esta instrucción varias veces FETCH NEXT FROM CUR_CLIENTES

EJEMPLO DE CURSORES DE DESPLAZAMIENTO /*Creamos el cursor /*scroll para que haya desplazamiento hacia atras o adelante DECLARE CUR_EMPLEADOS SCROLL CURSOR FOR SELECT IDEMPLEADO, NOMBRE, APELLIDOS FROM EMPLEADOS OPEN CUR_EMPLEADOS /*Recorremos los registros del cursor ‘Ubicamos en el primer registro FETCH FIRST FROM CUR_EMPLEADOS ‘Avanzamos al siguiente registro FETCH NEXT FROM CUR_EMPLEADOS ‘Retrocedemos al registro anterior FETCH PRIOR FROM CUR_EMPLEADOS --COMANDO PARA EL REGISTRO ANTERIOR ‘ubicamos en el ultimo registro FETCH LAST FROM CUR_EMPLEADOS

SQL SERVER Implementacion Pag.179

Page 180: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI Para avanzar o retroceder desde la posicion actual según si el numero especificado es un numero positivo o negativo FETCH RELATIVE 3 FROM CUR_EMPLEADOS ‘Te ubica directamente en el registro con la posicion 2 FETCH ABSOLUTE 2 FROM CUR_EMPLEADOS ‘Cierra temporalmente el cursor para ser reabierto con una instrucción OPEN CLOSE CUR_EMPLEADOS Lo cierra definitamente al borrarlo de memoria DEALLOCATE CUR_EMPLEADOS

UN CURSOR ACTUALIZABLE DECLARE CUR_CLIENTES CURSOR FOR SELECT * FROM CLIENTES OPEN CUR_CLIENTES FETCH NEXT FROM CUR_CLIENTES ‘Actualiza el registro actual del cursor UPDATE CLIENTES SET NOMBRECOMPAÑÍA='SISTEMAS UNI' WHERE CURRENT OF CUR_CLIENTES ‘Elimina el registro actual del cursor DELETE CLIENTES WHERE CURRENT OF CUR_CLIENTES Cerrar y eliminar el cursor CLOSE CUR_CLIENTES DEALLOCATE CUR_CLIENTES

UN CURSOR PARA REPORTES DECLARE @VAR1 VARCHAR(15) DECLARE @VAR2 VARCHAR(30) DECLARE @VAR3 VARCHAR(30) ‘Dynamic para que permita actualizar DECLARE CUR_CLIENTES CURSOR DYNAMIC FOR SELECT IDCLIENTE, NOMBRECOMPAÑíA, PAíS FROM CLIENTES OPEN CUR_CLIENTES FETCH FIRST FROM CUR_CLIENTES DECLARE @IDCLIENTE VARCHAR(15) DECLARE @NOMBRECOMPAÑIA VARCHAR(30) DECLARE @PAIS VARCHAR(30) WHILE @@FETCH_STATUS=0 BEGIN FETCH NEXT FROM CUR_CLIENTES INTO @IDCLIENTE,@NOMBRECOMPAÑIA, @PAIS PRINT @IDCLIENTE + ' ' +@NOMBRECOMPAÑIA + ‘ ‘+ @PAIS END

SQL SERVER Implementacion Pag.180

Page 181: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER Implementacion Pag.181

Page 182: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREAR INFORMES Y FORMULARIOS DE UNA BASES DE DATOS DE SQL SERVER Puede crear un proyecto de Microsoft Access y conectarlo a una base de datos de Microsoft SQL Server .

2. En el panel de tareas Nuevo archivo, en Nuevo, haga clic en Proyecto (datos existentes).

3. En el cuadro de diálogo Archivo nueva base de datos, haga clic en una ubicación en el cuadro Guardar en y especifique un nombre en el cuadro Nombre de archivo. Compruebe que aparece Proyectos de Microsoft Access en el cuadro Guardar como tipo y, finalmente, haga clic en Crear.

4. En la ficha Conexión del cuadro de diálogo vinculos de datos, especifique un nombre de servidor y la información necesaria para iniciar una sesión en el servidor

SQL SERVER Implementacion Pag.182

Page 183: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI 5. A continuación, seleccione la base de datos en el servidor.

7. Para Finalizar Haga clic en Aceptar.

SQL SERVER Implementacion Pag.183

Page 184: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREAR UN FORMULARIO CON UNA BASE DATOS DE UNA BASE DE SQL SERVER CON ACCESS

1. En la ventana Base de datos, Seleccione la tabla a la cual desea crearle un formulario

2. A continuacion abrir el Menu Insertar y elija la opcion Autoformulario

SQL SERVER Implementacion Pag.184

Page 185: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

CREAR UN INFORME CON UNA BASE DATOS DE UNA BASE DE SQL SERVER CON ACCESS

3. En la ventana Base de datos, Seleccione la tabla a la cual desea crearle un Informe

4. A continuacion abrir el Menu Insertar y elija la opcion Autoinforme

SQL SERVER Implementacion Pag.185

Page 186: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI SISTEMAS UNI

SQL SERVER Implementacion Pag.186

SQL SERVER Implementacion Pag.186

Page 187: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER 2000 PRACTICA 1 1. Crear la tabla empleados y definir su clave principal en la misma instrucción de creación.

______________________________________________________________________

2. Crear la tabla oficinas con su clave principal y su clave foránea ( la columna dir contiene el código de empleado del director de la oficina luego es un campo que hace referencia a un empleado luego es clave foránea y hace referencia a la tabla empleados).

______________________________________________________________________

3. Crear la tabla productos con su clave principal.

______________________________________________________________________

4. Crear la tabla clientes también con todas sus claves y sin la columna limitecredito.

______________________________________________________________________

4. Crear la tabla pedidos sin clave principal, con la clave foránea que hace referencia a los productos, la que hace referencia a clientes y la que indica el representante (empleado) que ha realizado el pedido.

______________________________________________________________________

5 Añadir a la definición de clientes la columna limitecredito.

______________________________________________________________________

6 Añadir a la tabla empleados las claves foráneas que le faltan. (Si no tienes claro cuales son te lo decimos ahora: la columna oficina indica la oficina donde trabaja el empleado y la columna director indica quién dirige al empleado, su jefe inmediato).

______________________________________________________________________

7 Hacer que no puedan haber dos empleados con el mismo nombre.

______________________________________________________________________

8 Añadir a la tabla de pedidos la definición de clave principal.

______________________________________________________________________

9 Definir un índice sobre la columna region de la tabla de oficinas.

______________________________________________________________________

10 Eliminar el índice creado.

______________________________________________________________________

SQL SERVER Implementacion Pag.187

Page 188: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER 2000 PRACTICA 2 Debes crear una consulta por cada ejercicio, no se pueden escribir varias sentencias SQL en una misma consulta.

Si quieres puedes guardar cada consulta con un nombre que permita identificarla por ejemplo: consulta_2_1 siendo 2 el número del tema y 1 el número del ejercicio dentro del tema. Ahora puedes empezar a redactar las sentencias SQL para obtener lo que se pide en cada ejercicio. CONSULTAS SIMPLES

1. Obtener una lista de todos los productos indicando para cada uno su idfab,

idproducto, descripción, precio y precio con I.G.V. incluido (es el precio anterior

aumentado en un 16%).

2. De cada pedido queremos saber su número de pedido, fab, producto, cantidad,

precio unitario e importe.

3. Listar de cada empleado su nombre, nº de días que lleva trabajando en la empresa y

su año de nacimiento (suponiendo que este año ya ha cumplido años).

4. Obtener la lista de los clientes agrupados por código de representante asignado,

visualizar todas la columnas de la tabla.

5. Obtener las oficinas ordenadas por orden alfabético de región y dentro de cada

región por ciudad, si hay más de una oficina en la misma ciudad, aparecerá primero

la que tenga el número de oficina mayor.

6. Obtener los pedidos ordenados por fecha de pedido.

7. Listar las cuatro líneas de pedido más caras (las de mayor importe).

8. Obtener las mismas columnas que en el ejercicio 2 pero sacando unicamente las 5

líneas de pedido de menor precio unitario.

9. Listar toda la información de los pedidos de marzo.

9. Listar los números de los empleados que tienen una oficina asignada.

10. Listar los números de las oficinas que no tienen director.

11. Listar los datos de las oficinas de las regiones del norte y del este (tienen que

aparecer primero las del norte y después las del este).

12. Listar los empleados de nombre Julia.

13. Listar los productos cuyo idproducto acabe en x.

SQL SERVER Implementacion Pag.188

Page 189: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER 2000 PRACTICA 3

Las consultas multitabla

1. Listar las oficinas del este indicando para cada una de ellas su número, ciudad, números y nombres de sus empleados. Hacer una versión en la que aparecen sólo las que tienen empleados, y hacer otra en las que aparezcan las oficinas del este que no tienen empleados.

______________________________________________________________________

2. Listar los pedidos mostrando su número, importe, nombre del cliente, y el límite de crédito del cliente correspondiente (todos los pedidos tienen cliente y representante).

______________________________________________________________________

3. Listar los datos de cada uno de los empleados, la ciudad y región en donde trabaja.

______________________________________________________________________

4. Listar las oficinas con objetivo superior a 600.000 pts indicando para cada una de ellas el nombre de su director.

______________________________________________________________________

10. Listar los pedidos superiores a 25.000 pts, incluyendo el nombre del empleado que tomó el pedido y el nombre del cliente que lo solicitó.

______________________________________________________________________

11. Hallar los empleados que realizaron su primer pedido el mismo día en que fueron contratados.

______________________________________________________________________

12. Listar los empleados con una cuota superior a la de su jefe; para cada empleado sacar sus datos y el número, nombre y cuota de su jefe.

______________________________________________________________________

13. Listar los códigos de los empleados que tienen una línea de pedido superior a 10.000 ptas o que tengan una cuota inferior a 10.000 pts.

______________________________________________________________________

SQL SERVER Implementacion Pag.189

Page 190: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI SQL SERVER 2000 PRACTICA 4 EJERCICIOS DE SUBCONSULTAS

Los ejercicios que te proponemos a continuación se pueden resolver de varias maneras, intenta resolverlos utilizando subconsultas ya que de eso trata el tema, además un mismo ejercicio lo puedes intentar resolver de diferentes maneras utilizandos distintos tipos de condiciones, así un ejercicio se puede convertir en dos o tres ejercicios.

1. Listar los nombres de los clientes que tienen asignado el representante Alvaro Jaumes (suponiendo que no pueden haber representantes con el mismo nombre).

_____________________________________________________________________________________________________________________________________________________________________________________________________________________

2. Listar los vendedores (numemp, nombre, y nº de oficina) que trabajan en oficinas "buenas" (las que tienen ventas superiores a su objetivo).

_____________________________________________________________________________________________________________________________________________________________________________________________________________________

3. Listar los vendedores que no trabajan en oficinas dirigidas por el empleado 108.

_____________________________________________________________________________________________________________________________________________________________________________________________________________________

4. Listar los productos (idfab, idproducto y descripción) para los cuales no se ha recibido ningún pedido de 25000 o más.

_____________________________________________________________________________________________________________________________________________________________________________________________________________________

5. Listar los clientes asignados a Ana Bustamante que no han remitido un pedido superior a 3000

_____________________________________________________________________________________________________________________________________________________________________________________________________________________

6. Listar las oficinas en donde haya un vendedor cuyas ventas representen más del 55% del objetivo de su oficina.

_____________________________________________________________________________________________________________________________________________________________________________________________________________________

7. Listar las oficinas en donde todos los vendedores tienen ventas que superan al 50% del objetivo de la oficina.

_____________________________________________________________________________________________________________________________________________________________________________________________________________________

8. Listar las oficinas que tengan un objetivo mayor que la suma de las cuotas de sus vendedores.

L SERVER Implementacion Pag .190 SQ

Page 191: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

SQL SERVER 2000 PRACTICA 5 CONSULTAS DE RESUMEN

1. ¿Cuál es la cuota media y las ventas medias de todos los empleados?

______________________________________________________________________

2. Hallar el importe medio de pedidos, el importe total de pedidos y el precio medio de

venta (el precio de venta es el precio unitario en cada pedido).

______________________________________________________________________

3. Hallar el precio medio de los productos del fabricante ACI.

______________________________________________________________________

4. ¿Cuál es el importe total de los pedidos realizados por el empleado Vicente Pantalla?

______________________________________________________________________

5. Hallar en qué fecha se realizó el primer pedido (suponiendo que en la tabla de pedidos

tenemos todos los pedidos realizados hasta la fecha).

______________________________________________________________________

6. Hallar cuántos pedidos hay de más de 25000 ptas.

______________________________________________________________________

7. Listar cuántos empleados están asignados a cada oficina, indicar el número de oficina y

cuántos hay asignados.

______________________________________________________________________

8. Para cada empleado, obtener su número, nombre, e importe vendido por ese empleado

a cada cliente indicando el número de cliente.

______________________________________________________________________

9. Para cada empleado cuyos pedidos suman más de 30.000 ptas, hallar su importe medio

de pedidos. En el resultado indicar el número de empleado y su importe medio de

pedidos.

______________________________________________________________________

SQL SERVER Implementacion Pag.191

Page 192: Introduccion a SQL Server 2000 (Buen Manual)

SISTEMAS UNI

10. Listar de cada producto, su descripción, precio y cantidad total pedida, incluyendo sólo

los productos cuya cantidad total pedida sea superior al 75% del stock; y ordenado por

cantidad total pedida.

______________________________________________________________________

11. Saber cuántas oficinas tienen empleados con ventas superiores a su cuota, no queremos

saber cuales sino cuántas hay.

12. Subir un 5% el precio de todos los productos del fabricante ACI.

______________________________________________________________________

13. Añadir una nueva oficina para la ciudad de Madrid, con el número de oficina 30, con un objetivo de 100000 y región Centro.

______________________________________________________________________

14. Cambiar los empleados de la oficina 21 a la oficina 30.

______________________________________________________________________

15. Eliminar los pedidos del empleado 105.

______________________________________________________________________

16. Eliminar las oficinas que no tengan empleados.

______________________________________________________________________

17. Recuperar los precios originales de los productos a partir de la tabla nuevosproductos.

______________________________________________________________________

18. Recuperar las oficinas borradas a partir de la tabla nuevaoficinas.

______________________________________________________________________

19. Recuperar los pedidos borrados en el ejercicio 8 a partir de la tabla nuevapedidos.

______________________________________________________________________

20. A los empleados de la oficina 30 asignarles la oficina 21.

______________________________________________________________________

SQL SERVER Implementacion Pag.192