Sei sulla pagina 1di 192

S

ISTEMAS
UNI

SQL SERVER Implementacion Pag.1
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.2
SQL Server es un Sistema de Gestin de Bases de Datos Relacinales (SGBDR), desarrollado por
Microsoft, que permite, como su propio nombre indica, la gestin de un entorno de bases de datos
relacional. SQL Server abarca, tanto el rea de diseo, como la de administracin, 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
definicin 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 extensin al SQL estndar, que se denomina Transact SQL. Esto quiere
decir que soporta el SQL de ANSI, pero adems se le han aadido ciertas funciones adicionales,
no contempladas en el estndar, y que son especficas para este producto, es decir, si ejecutamos
una sentencia del conjunto adicional (Transact SQL) en otro SGBRD, ste no la entendera.

El Transact SQL, soporta la definicin, modificacin y eliminacin de bases de datos, tablas,
atributos, ndices, etc., es decir, el lenguaje de definicin de datos (DDL), as como la consulta,
actualizacin y borrado de Tuplas o Registros de tablas, es decir, el lenguaje de manipulacin 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
S
ISTEMAS
UNI
LO NUEVO EN SQL-SERVER 2000

Veremos en esta sesion las mejoras que ha sufrido esta versin 2000, con respecto a las
anteriores, mejoras que pasamos a detallar a continuacin.

NUEVAS CARACTER STI CAS

Entre las nuevas caractersticas que ofrece SQL-Server 2000, cabe destacar las siguientes:

Soporte para XML.
Funciones de usuario.
Indexacin de vistas.
Nuevos tipos de datos.
Nuevos triggers.
Reglas de integridad referencial en cascada.
Nuevas caractersticas de indexacin.
Soporte para consultas distribuidas.
Caractersticas de seguridad y cifrado de datos.

SOPORTE PARA XML

El Extensible Markup Language, ms 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 Cdigo 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
S
ISTEMAS
UNI

FUNCI ONES DE USUARI O

Una funcionalidad nueva que aparece en esta versin 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 entraar una consulta, no slo para la
posterior reutilizacin de la misma, sino tambin teniendo en cuenta la abstraccin
para otros programadores que puedan precisar su uso.

I NDEXACI N DE VI STAS

Esta funcionalidad permite optimizar la ejecucin de vistas que actan sobre la base
de datos, creando ndices sobre los resultados de ejecucin de la misma, que son
almacenados en la base de datos. El usuario no debe preocuparse de la actualizacin
de los datos, sino que stos son indexados automticamente cada vez que se
actualicen.

NUEVOS TI POS DE DATOS

SQL-Server 2000 soporta tres nuevos tipos de datos con respecto a la anterior
versin, 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 TRI GGERS

Un trigger o desencadenador es un cdigo especial que se ejecuta cuando se cumple
una determinad a condicin, como por ejemplo al modificar o borrar datos (se ver en
detalle en un captulo 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 accin que lo ha
desencadenado.

REGLAS DE I NTEGRI DAD REFERENCI AL EN
CASCADA

Las reglas de integridad referencial son la base del mantenimiento de la consistencia
en la base de datos, y hacen referencia a informacin que esta relacionada entre si,
como por ejemplo el departamento de un empleado cuyo cdigo se especifica. La
forma ms usual de mantenerlo es usando claves forneas, y especificando el
comportamiento de las inserciones, borrados y actualizaciones de este tipo de datos.

SQL SERVER Implementacion Pag.4
S
ISTEMAS
UNI

NUEVAS CARACTER STI CAS DE I NDEXACI N

Las nuevas caractersticas de indexacin 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 DI STRI BUI DAS

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

CARACTER STI CAS DE SEGURI DAD Y
CI FRADO DE DATOS

SQL-Server 2000 utiliza Kerberos como servidor de autenticacin, para acreditar el acceso al
servidor que se realiza desde el cliente, as como diversas tcnicas de seguridad.

VERSI ONES DE SQL SERVER

Existen varias ediciones de SQL Server. Es muy fcil escogerla basndose en la cantidad de
memoria y el nmero de CPUs que es necesario utilizar. Las ediciones de SQL Server se
describen aqu.

SOFTWARE PARA CLI ENTES

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
idnticos independientemente de la edicin de SQL Server instalada.

PERSONAL EDI TI ON

La versin Personal Edition de SQL Server est diseada para pequeas 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 EDI TI ON

SQL Server 2000 Standar Edition es una de las dos ediciones servidoras de SQL Server
2000. La versin Standar Edition funciona de la misma forma que la versin Enterprise
Edition, excepto que slo se puede acceder a un mximo de cuatro CPUs y 4 GB de memoria
con la versin Standar Edition.

SQL SERVER Implementacion Pag.5
S
ISTEMAS
UNI

ENTERPRI SE EDI TI ON

La versin Enterprise Edition de SQL Server soporta todas las caractersticas y la
funcionalidad de todas las versiones de Windows 2000. SQL Server 2000 Enterprise Edition
requiere Windows 2000 Advanced Server o Windows 2000 Datacenter. Adems, SQL
Server 2000 Enterprise Edition soporta clsteres de conmutacin por error y vistas
distribuidas actualizables.

SQL SERVER Implementacion Pag.6
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.7
S
ISTEMAS
UNI

I NSTALACI N DE SQL SERVER 2000

En este captulo, 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
automticamente, 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 instalacin 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 opcin STANDARD (si no disponemos de un servidor,
nicamente se instalarn 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 versin 5.5 del navegador WEB Microsoft
Internet Explorer.
SQL SERVER Implementacion Pag.8
S
ISTEMAS
UNI

.
3. Para proseguir la instalacin, pulsamos la
opcin SQL Server 2000 Components,
aparecindonos la pantalla que muestra
la Figura








4. Pulsamos el botn Next (Siguiente), visualizndose la pantalla que se muestra en la
Figura













En este caso, puesto que queremos instalar los componentes cliente en nuestro
equipo local, slo nos permite la seleccin de esta opcin.

5. Si pulsamos el botn Next (Siguiente), visualizaremos la siguiente pantalla que
muestra la Figura













Nuevamente, al estar instalando la versin standard en un equipo con Windows 98,
slo se nos permite seleccionar la opcin de crear una nueva instancia de SQL Server.

6. Pulsando el botn Next (Siguiente), obtendremos la pantalla que se muestra en la
Figura, donde se nos insta a poner nuestro nombre y compaa.

SQL SERVER Implementacion Pag.9
S
ISTEMAS
UNI
















7. Si pulsamos nuevamente el botn 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 opcin de instalacin de las herramientas cliente y pulsando el botn
Next, accederemos a la pantalla de la Figura, en la que podemos seleccionar los
componentes y subcomponentes a instalar.












SQL SERVER Implementacion Pag.10
S
ISTEMAS
UNI



9. Dejamos marcados los que vienen por defecto y pulsamos el botn Next (siguiente),
para acceder a la pgina 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 conclusin del proceso de instalacin, como muestra la Figura





















SQL SERVER Implementacion Pag.11
S
ISTEMAS
UNI
REQUERI MI ENTOS DE SQL SERVER 2000
RELATI VAS AL HARDWARE
Despus de determinar la versin 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.
Tambin necesita un plan apropiado de proteccin del sistema y de la informacin en el nivel
del hardware.

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

Memoria: Un mnimo de 256 MB de RAM para la edicin Standard y 512 MB de RAM
para la edicin Enterprise. Esto supera varas veces el requerimiento de memoria
mnimo de 32 MB y 64 MB respectivamente; la razn principal para esta necesidad de
memoria extra es el rendimiento. J untos, los servicios de SQL Server 2000 y los
servicios estndar 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 tambin utilizan memoria, y este
consumo de memoria se suma a todos los otros procesos y aplicaciones que se estn
ejecutando en el servidor.

Procesador: SQL Server 2000 slo se ejecuta en mquinas 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 mayora 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 simtricos y puede
procesar consultas complejas en paralelo. Las consultas en paralelo son valiosas
solamente cuando hay pocos usuarios en el sistema y se estn procesando consultas
de gran complejidad. En un sistema dedicado que slo est ejecutando SQL Server y
d servicio a menos de 100 usuarios simultneos, un solo procesador debera ser
suficiente. Si el servidor presta servicio a ms de 100 usuarios o no funciona en un
sistema dedicado, puede que convenga agregar procesadores (o utilizar un sistema
que permite aadir procesadores adicionales a medida que crezcan sus necesidades).

Unidades de disco: La capacidad de almacenamiento de datos que necesite
depender totalmente del nmero y tamao de las bases de datos a las que el
servidor d servicio. Necesitar suficiente espacio de disco para almacenar toda la
informacin, ms el espacio de trabajo, archivos del sistema, memoria virtual, registros
de transacciones y, en el caso de un clster, el disco de qurum. El rendimiento total
de E/S es tan importante como la capacidad de la unidad.

SQL SERVER Implementacion Pag.12
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.13
S
ISTEMAS
UNI
S S E E R RV V I I C CI I O OS S D DE E S S Q QL L S S E E R RV V E E R R

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 estn
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
S
ISTEMAS
UNI

EL ADMI NI STRADOR DE SERVI CI OS

El Administrador de servicios es una pequea aplicacin 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 estn
disponibles todas las bases del servidor

S SE ER RV VI I C CI I O O M MS SS SQ QL LS SE ER RV VE ER R

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 caractersticas son:

Asignar los recursos de la computadora a mltiples usuarios simultneos.
Previene problemas lgicos, tales como sincronizacin de peticiones de usuarios
que desean actualizar la misma informacin al mismo tiempo.
Garantiza la integridad y consistencia de datos.



SQL SERVER Implementacion Pag.15
S
ISTEMAS
UNI

S SE ER RV VI I C CI I O O S SQ QL LS SE ER RV VE ER RA AG GE EN NT T
El Agente SQL Server admite funciones que permiten programar trabajos para ejecutarse en
forma peridica 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:
Tr abaj os
Objetos definidos que constan de uno o ms 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
especficas o a intervalos regulares.
Al er t as
Acciones que se realizan cuando se producen sucesos especficos, como un error
concreto o errores de cierta gravedad, o cuando se alcanza el lmite de espacio libre
disponible definido en una base de datos. Se puede definir que la alerta realice
acciones como el envo de mensajes de correo electrnico, mensajes de localizacin a
un operador o la ejecucin de un trabajo que resuelva el problema.
Oper ador es
Personas identificadas mediante sus cuentas de red o de correo electrnico, quienes
pueden resolver los problemas del servidor. Pueden ser destinos de las alertas, a
travs de correo electrnico, un localizador o comandos de red envo de red.
S SE ER RV VI IC CI IO O M MI IC CR RO OS SO OF FT T D DI IS ST TR RI IB BU UT TE ED D
T TR RA AN NS SA AC CT TI IO ON N C CO OO OR RD DI IR RA AT TO OR R: :

Se encarga de Coordinar la apropiada terminacin 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
S
ISTEMAS
UNI
S SE ER RV VI I C CI I O O M MI I C CR RO OS SO OF FT T S SE EA AR RC CH H

El Servicio Microsoft Search es un motor de indexacin(ordenacion) y de bsqueda 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 tambin se puede instalar durante la instalacin del SQL Server (No est
disponible para la versin SQL Server Personal)
Para saber si este servicio est instalado en nuestro equipo la manera ms sencilla es recurrir
al Administrador de Servicios del SQL Server
Entre las diferencias existentes entre este servicio y las bsquedas 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. Slo 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 (Tambin se pueden llenar automticamente en la insercin de datos).
Son ms rpidos y flexibles.
La utilizacin 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 bsquedas y devolver conjuntos de resultados
adecuados al criterio de bsqueda.
SQL SERVER Implementacion Pag.17
S
ISTEMAS
UNI




















SQL Server incluye una variedad de software para administrar y
mantener al servidor, encontrando ayuda acerca de temas especficos,
diseando y creando Bases de Datos y buscando informacin.
SQL SERVER Implementacion Pag.18
S
ISTEMAS
UNI

EL ENTERPRI SE MANNAGER-ADMI NI STRADOR
CORPORATI VO
El ADMINISTRADOR CORPORATIVO es la herramienta ms completa para configurar y
administrar la instalacin 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
S
ISTEMAS
UNI





SQL SERVER Implementacion Pag.20
S
ISTEMAS
UNI

El Administrador corporativo permite iniciar y detener un servidor, y tambin capacita para
realizar las siguientes tareas:

Registrar el servidor.

Configurar servidores locales y remotos.

Configurar y administrar una instalacin de mltiples servidores.

Ajustar la seguridad de inicio de sesin y aadir usuarios, administradores de sistema
y operadores.

Asignar una contrasea 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 travs de correo electrnico.

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 contrasea de administrador de sistema predeterminada Al instalar SQL
Server, la cuenta de administrador de sistema predeterminada se configura sin
contrasea. Se debe especificar una contrasea antes de comenzar a usar SQL
Server


SQL SERVER Implementacion Pag.21
S
ISTEMAS
UNI

REGI STRAR EL SERVI DOR SQL SERVER

Esta tarea es sumamente sencilla.

1. En primer lugar, en el men Accin, se selecciona la opcin Nuevo registro de servidor
SQL Server.... Con esto se iniciar el Asistente para registro de servidor SQL Server


























2. Pulse clic en el botn 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 deberamos ingresar
este nombre si es que no figur
pase a la lista de Servidores
agregados Si hubiera ms de
un servidor disponible, se
podran registrar varios de una
sola vez, pasndolos 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
S
ISTEMAS
UNI

Ahora el asistente solicita el modo de autenticacin que se utilizar cada vez que se deba
conectar al servidor.

La eleccin en este caso depende de las polticas 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 opcin, que indica que se utilice Autenticacin SQL Server,
o sea, que el nombre de usuario y password que se empleen para conectarse a la base
se validarn contra la lista de usuarios habilitados por SQL Server (la otra opcin
determina que se validen contra los usuarios habilitados por Windows NT).

3. Hecho esto, se puede pulsar click en Siguiente y pasar al prximo paso,en el cual se
debe determinar si la conexin se har automticamente con un nombre de usuario y
password especficos o si stos se solicitarn cada vez que se haga la conexin.
















En caso de que se elija la primera opcin, se puede optar por seleccionar el usuario
SApor system administrator, se supone, sin password, que se define por defecto en
las instalaciones nuevas de SQL Server .Lgicamente, si la base de datos requiere un
mnimo 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 agrupacin es til en empresas que cuentan con gran
cantidad de servidores reunidos por sectores (por ejemplo, Produccin, Ventas,
Administracin, 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 dndole el nombre que
uno desee









SQL SERVER Implementacion Pag.23
S
ISTEMAS
UNI


5. En la ltima pantalla del asistente se muestra la lista de servidores a agregar y el botn
Finalizar. Al cliquear en l, el asistente intentar registrar el o los servidores
seleccionados. Puede que se produzca un error durante el proceso de registracin. En la
mayora de los casos,el origen de la falla ser un problema en la especificacin de las
direcciones de red y los protocolos a utilizar, y dems parmetros de comunicacin. Para
solucionarlo, hay que recurrir a la Herramienta de red de cliente y examinar la
configuracin 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 botn + a
la izquierda de la carpeta Bases de datos aparecen todas las bases definidas dentro de
este servidor.








SQL SERVER Implementacion Pag.24
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.25
S
ISTEMAS
UNI

ACCEDER AL SERVI DOR EN EL
ADMI NI STRADOR CORPORATI VO

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 recin 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 continuacin expandir el nombre del servidor para
que se muestren todas sus propiedades y objetos.























SQL SERVER Implementacion Pag.26
S
ISTEMAS
UNI
CONFI GURACI N DEL SERVI DOR
A travs del Administrador corporativo se puede realizar la configuracin del servidor,
redefiniendo los parmetros de memoria, las conexiones de usuario o los bloqueos
establecidos.
Cada una de las pestaas de la pantalla anterior
tienen las siguientes funciones:
General: Permite establecer parmetros
de arranque, y proporciona informacin
general sobre la instalacin
Memoria: Reservar memoria fsica o
configurar la gestin dinmica de la
memoria del servidor.
Procesador: Gestionar el entorno
multiprocesador.(Varios procesadores)
Seguridad: Autenticacin, auditora, y
arranque.
Conexiones: Gestin de usuarios
concurrentes y atributos.
Parmetros de Servidor: Soporte ao
2000, lenguaje, etc.
Parmetros de Base de datos: ndices,
periodo de recuperacin y gestin de
salvaguardas.
En el siguiente ejemplo definiremos la
configuracin de memoria para que utilice de
forma dinmica 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
configuracin de SQL SErver.
3. Acceda a la pestaa Memoria.
4. Cambie el valor mnimo del parmetro
Configurar dinmicamente la memoria a
8Mb. Haga clic en Aceptar

La cantidad mxima de memoria que se
puede asignar a SQL Server es la cantidad total
de RAM disponible en su servidor. Si la
cantidad de carga flucta, establezca que la
memoria se configure dinmicamente.
SQL SERVER Implementacion Pag.27
S
ISTEMAS
UNI
I NTRODUCCI ON 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 estn representadas por los operarios,
los empleados, los clientes, los proveedores, las facturas. En un hospital nos encontraramos
con los mdicos, pacientes, enfermeras, cuadros clnicos, 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 fcil acceso en cada momento y, por consiguiente, tiles a nuestras
actividades. Si por ejemplo cada da debemos gestionar varias decenas de clientes y facturas,
utilizaremos un sistema para memorizar los datos como, por ejemplo, un archivo, ms 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 slo 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 ms que una coleccin de
informaciones tales como el catlogo de los ficheros de una biblioteca, un listn telefnico o
una enciclopedia. Los programas de gestin de base de datos (Database) estn programados
para realizar operaciones que nos permiten acceder y, eventualmente, modificar los datos
almacenados. Estas operaciones consisten en:Introduccin, cancelacin, modificacin y
bsqueda de informacion a partir de los criterios seleccionados por el usuario de orden,
clasificacin e impresin de los listados, por ejemplo, bajo el formato de etiquetas adhesivas
para sobres




SQL SERVER Implementacion Pag.28
S
ISTEMAS
UNI

ESTRUCTURA DE LAS BASES DE DATOS
Una vez se ha instalado Microsoft SQL Server 2000 y se ha diseado una
distribucin de bases de datos y discos, se est preparado para crear una base de datos.
SQL Server 2000 hace uso de los mtodos mejorados de almacenamiento de datos y
administracin del espacio que se presentaron en SQL Server 7. Las versiones anteriores del
producto utilizaban dispositivos lgicos y segmentos de un tamao 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 automticamente.

BASES Y TABLAS DEL SI STEMA
Cuando se instala SQL Server se crean cuatro bases de datos del sistema que
guardan informacin 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 informacin de nivel de sistema para el
servidor SQL Server.

Esto incluye:

1. Las cuentas de inicio de sesin,
2. parmetros de configuracin del servidor,
3. Registrar la existencia de otras bases de datos, etc.

La base de datos Master es absolutamente crtica para los datos, por le que debera
mantener siempre una copia de seguridad de la misma. La mayor parte de los
procedimientos almacenados del sistema tambin se guardan en esta base de datos,
junto a los mensajes de error.



SQL SERVER Implementacion Pag.29
S
ISTEMAS
UNI

MSBD

Su uso principal es el almacenamiento de la informacin que emplea el agente SQL Server,
como programacin de trabajos, definicin de operadores y alertas. La informacin de la
copia de seguridad tambin se almacena en esta base de datos, y se emplea en la
restauracin 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 automticamente 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 ordenacin, las
operaciones multitabla, el tratamiento de cursores, etc. Estas tablas temporales se borran tan
pronto como el conjunto de resultados se devuelve a la aplicacin 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 Catlogo de la base de datos. La base de datos MASTER tiene un conjunto
adicional de tablas que describen la instalacin de SQL Server. Este conjunto se denomina
Catlogo del sistema.

SQL SERVER Implementacion Pag.30
S
ISTEMAS
UNI

El catlogo de la base de datos MSDB se usa como rea de almacenamiento para:
La informacin de configuracin utilizada por el Agente SQL Server. Incluye
informacin acerca de trabajos, pasos de trabajo, alertas, operadores, etc.
Informacin histrica de copia de seguridad. Se conserva para que el Administrador
Corporativo pueda ayudar en la restauracin de la base de datos.
Adems de tablas, tambin hay Vistas del Sistema, y Procedimientos almacenados del
Sistema.
Un procedimiento almacenado del
sistema es un procedimiento
almacenado con algunas
caractersticas 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
S
ISTEMAS
UNI
ARQUI TECTURA F SI CA 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
fsicamente en archivos
Bases de Datos almacenadas
fsicamente en archivos
Tablas, ndices, vistas y otros
objetos colocados en grupos de
archivos
Pginas asignadas a tablas e
ndices
Columnas (campos) filas (registros)
y almacenadas en tablas
Informacin 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 pgina es el nivel inferior de entrada/salida de SQL Server, y es la unidad de
almacenamiento fundamental. Las pginas contienen los propios datos o bien
informacin acerca de la disposicin fsica de los datos.
Existen seis tipos de pgina en SQL Server:
Tipo de Pgina 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 imgenes
Mapa de Asignacin
Global
Informacin acerca de las extensiones
empleadas
Pgina de Espacio
Libre
Informacin acerca del espacio libre en las
pginas.
Mapa de Asignacin de
ndices
Informacin acerca de las extensiones usadas
por una tabla o ndice.

Todas las pginas tienen una disposicin similar. Todas tienen una cabecera de pgina de 96
bytes, y un cuerpo que, en consecuencia, ocupa 8.096 bytes. La informacin almacenada en
la cabecera y en el cuerpo depende del tipo de pgina.

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



SQL SERVER Implementacion Pag.32
S
ISTEMAS
UNI

Un archivo de base de datos puede configurarse para crecer automticamente, si se desea, o
se puede limitar en su crecimiento. La unidad ms pequea de entrada/salida y la estructura
bsica de almacenamiento es una pgina de 8 KB. Las pginas 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 pequeas.
Utilizando grupos de archivos, se puede especificar el archivo (o conjunto de archivos) en el
que se debera almacenar una tabla o ndice.











Un ndice agrupado ordena la tabla de acuerdo a la clave del ndice. Los ndices no
agrupados (tambin llamados rboles binarios) apuntan a las filas de datos.
El tamao mximo de un nico archivo de base de datos es de 32 TB (treinta y dos billones
de bytes), y el tamao mximo de una base de datos es de 1.048.516 TB.

SQL SERVER Implementacion Pag.33
S
ISTEMAS
UNI
ARCHI VOS 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 informacin 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 ms 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. ARCHI VO DE DATOS PRI NCI PAL: Un archivo de datos principal contiene toda la
informacin 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. Tambin 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 extensin de archivo recomendada es
mdf.

2. ARCHI VOS DE DATOS SECUNDARI OS: Los archivos de datos secundarios son
opcionales. Pueden contener datos y objetos que no se encuentren en el archivo
principal. Una base de datos podra no tener ningn archivo secundario si todos sus
datos se encuentran en el archivo principal. Se pueden tener cero, uno, o mltiples
archivos secundarios. Algunas bases de datos necesitan archivos secundarios
mltiples para poder repartir los datos entre discos separados. La extensin de archivo
recomendada es ndf.

3. ARCHI VOS DE REGI STRO DE TRANSACCI ONES: Un archivo de registro de
transacciones contiene toda la informacin 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 mltiples archivos de registro. La extensin de archivo
recomendada es ldf.

Una base de datos simple podra 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 ms compleja podra tener un archivo de
datos principal, cinco archivos de datos secundarios y dos archivos de registro de
transacciones. Entonces, cmo podran 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
S
ISTEMAS
UNI
GRUPOS DE ARCHI VOS

Los grupos de archivos permiten agrupar archivos con propsitos 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 mltiples discos o servidores .Se pueden
crear tablas e ndices en discos especficos 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 caractersticas principales de estos grupos de
archivos se resumen en la siguiente lista:

1. Gr upo de ar c hi vos pr i nc i pal : 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- estn
asignadas al grupo de archivos principal de esa base de datos. SQL Server crea
automticamente las tablas de sistema al crearse una base de datos.

2. Gr upos de ar c hi vos def i ni dos por el usuar i o: Incluyen cualquier grupo de
archivos creado por el usuario mientras dura el proceso de creacin (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 especfico.

3. Gr upo de ar c hi vos pr edet er mi nado: Guarda todas las pginas 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.

Ej empl o de un Caso de apl i c ac i on

Para mejorar el rendimiento se puede controlar la ubicacin de los datos mediante la
creacin de tablas e ndices en grupos de archivos diferentes. Por ejemplo, podra
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, ms pequeo (compuesto de 4 unidades de
disco, por ejemplo). As, la tabla a la que se accede ms frecuentemente estar
repartida en el nmero mayor de discos, permitiendo una E/S de disco con mayor
eficiencia

SQL SERVER Implementacion Pag.35
S
ISTEMAS
UNI
REGLAS Y RECOMENDACI ONES

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 ms de una base de
datos.
2. Un archivo slo puede ser miembro de un grupo de archivos.

3. Los datos y la informacin 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.

Adems de estas reglas, hay modos especficos de uso de archivos y grupos de archivos
que ayudan a disear la base de datos:

5. La mayora de las bases de datos funcionarn correctamente con slo un archivo de
datos principal y un archivo de registro de transacciones. Este es el diseo
recomendado para bases de datos que no hacen un uso particularmente intenso de la
E/S. Si se tiene un sistema con una utilizacin 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 mltiples, utilizar el archivo de datos principal
solamente para las tablas y objetos del sistema, y crear uno o ms archivos de datos
secundarios para los datos y objetos del usuario.

8. Crear los archivos y grupos de archivos entre tantos discos fsicos 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 fsicos
diferentes, si es posible, para permitir E/S paralela de disco mientras el motor de
bsqueda encuentra los datos.
SQL SERVER Implementacion Pag.36
S
ISTEMAS
UNI
CREACI N DE BASES DE DATOS
SQL Server proporciona tres mtodos para la creacin de una base de datos: el Asistente
para creacin 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 fsicas diferentes (ni en unidades diferentes ni en carpetas diferentes) si se
utiliza el asistente .Debido a estas limitaciones, el Asistente para creacin de bases
de datos es la mejor eleccin si slo 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 aadir archivos y grupos de archivos a la base de datos posteriormente si se
necesitan.)

CREAR UNA BASE DE DATOS UTI LI ZANDO EL
ASI STENTE DE CREACI ON 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 ms a la
izquierda del nombre de la carpeta.), expandir la
carpeta Grupo de SQL Server y a continuacin
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
S
ISTEMAS
UNI

3. Pulsar dos veces en el Asistente para
creacin de bases de datos para iniciar
el Asistente para creacin de bases de
datos.











4. Pulsar Siguiente para pasar a la pantalla
Dar nombre a la base de datos y
especificar su ubicacin. 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 tamao inicial para cada uno de los archivos de base de
datos. El archivo principal de la base de datos se crea automticamente 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
S
ISTEMAS
UNI






















6. SQL Server puede aumentar automticamente el tamao de la base de datos segn
se necesite, lo cual ayuda a reducir la sobrecarga de mantenimiento En general, se
debera seleccionar la caracterstica de crecimiento automtico (Crecimiento
automtico de archivos de base de datos) porque implica poca sobrecarga de
rendimiento de otra forma, se necesitar ajustar manualmente el tamao de la base de
datos segn sea necesario.

Si se pulsa Crecimiento automtico de archivos de base de datos se puede
especificar la manera en que el archivo de base de datos deber aumentar:
bien en un nmero fijo de megabytes o segn un porcentaje del tamao actual.
Debe tenerse en cuenta que el archivo de base de datos crecer slo segn se
necesite.

Tambin se puede restringir la base de datos a un tamao mximo o dejarla
crecer sin restricciones. Las configuraciones de esta pantalla se aplicarn a
cada archivo de base de datos que se creara en el paso 4.


















SQL SERVER Implementacion Pag.39
S
ISTEMAS
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 versin 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 tamao inicial para el registro de transacciones. (Recurdese que un registro de
transacciones contiene una grabacin de todas las modificaciones de la base de datos
para posibilitar la recuperacin en caso de un fallo de sistema.)

8. Pulsar Siguiente para continu
archivo de registro de
transacciones


ar.Se muestra la pantalla Definir el crecimiento del

9. parece la pantalla Completando el Asistente para creacin de bases de datos.
Finalizar para terminar la creacin de la base de datos Una vez se ha creado la base













A
de datos, aparece un cuadro de mensaje Asistente para creacin 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
S
ISTEMAS
UNI
CREAR UNA BASE DE DATOS CON
ADMI NI STRADOR CORPORATI VO
El Administrador corporativo de SQL Server da la capacidad de crear bases de datos ms
complejas que las creadas con el Asistente para creacin 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 continuacin pulsar con el botn
derecho del ratn 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 pestaa 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
S
ISTEMAS
UNI


3. Pulsar la pestaa Archivos de datos. Como se muestra en la figura siguiente, el
Administrador corporativo crea automticamente 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, posicin y tamao del archivo principal, pero no se
puede cambiar el grupo de archivos del archivo de datos principal. Escribir el nombre
de archivo (nombre lgico), ubicacin (nombre fsico), tamao 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 aadido la base de datos. En el panel derecho del
Administrador corporativo se ver que SQL Server ha aadido un icono para esa base
de datos.
SQL SERVER Implementacion Pag.42
S
ISTEMAS
UNI
EXAMI NAR 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 informacin de la base de datos utilizando el Administrador corporativo se deben
seguir estos pasos:

1. En el Administrador corporativo, expandir (pulsando los signos ms) 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 botn derecho del ratn en el nombre de la base de datos que se quiere
eliminar
2. A continuacin, 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
S
ISTEMAS
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
diseo:

1. Qu datos contendr cada tabla?
2. Qu columnas deben crearse para albergar los datos y cmo deben llamarse?
3. Cules son los requisitos del rango de los datos que se permitira 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 utilizacin de valores predeterminados.)
5. Qu columnas sern claves principales y cules sern 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?

DEFI NI CI N DE TABLA DE UNA BASE DE
DATOS

Una tabla es un objeto de una base de datos que almacena datos en una coleccin 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 clculo 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 numricos, se permite que haya en cada columna. Tambin se
debe decidir sobre un rango permisible a esos datos -por ejemplo, podra decidirse permitir
hasta 30 caracteres o nmeros.

SQL SERVER Implementacion Pag.44
S
ISTEMAS
UNI
Tipos de Datos SQl server






























SQL SERVER Implementacion Pag.45
S
ISTEMAS
UNI










































SQL SERVER Implementacion Pag.46
S
ISTEMAS
UNI

CREACI N DE TI POS DE DATOS DEFI NI DOS
POR EL USUARI O MEDI ANTE EL USO DEL
ADMI NI STRADOR CORPORATI VO
Podra desearse crear tipos de datos para datos como nmeros de telfono, cdigos postales,
nmeros de la Seguridad Social y cualesquiera otros datos que se puedan definir claramente
y que se vayan a utilizar en ms de una tabla de base de datos.

1. En el Administrador corporativo, expandir un grupo SQL Server (pulsando en el
signo ms al lado de la carpeta) y a continuacin expandir un servidor.
2. Expandir la carpeta Bases de datos y luego expandir una base de datos. .
3. Pulsar con el botn derecho del ratn 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 continuacin 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 verificacin
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
S
ISTEMAS
UNI

CREACI ON DE UNA TABLA MEDI ANTE EL
ADMI NI STRADOR CORPORATI VO
Ahora que se entienden los elementos bsicos de la creacin 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 crtico recordar que cuando se diseen
bases de datos propias se deben disear 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 continuacin
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 botn derecho del ratn 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
S
ISTEMAS
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
Maysculas (o la barra espaciadora) o pulsando en la columna Permitir valores
nulos si el dato no es obligatorio.






























Nombre del Dato
Tipo del Dato
Tamao del Dato
PGI NA DE PROPI EDADES DE COLUMNAS

DESCRIPCIN
Muestra la descripcin 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.

PRECISIN
Muestra el nmero mximo de dgitos para los valores de la columna seleccionada.

ESCALA
Muestra el nmero mximo de dgitos que pueden aparecer a la derecha de la coma decimal
para los valores de la columna seleccionada.
SQL SERVER Implementacion Pag.49
S
ISTEMAS
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 duplicacin) La columna se utiliza como una columna de
identidad, salvo si un agente de duplicacin est insertando datos en la tabla.

INICIALIZACIN DE IDENTIDAD
Muestra el valor de inicializacin de una columna de identidad. Esta opcin slo se aplica a
las columnas cuya opcin Identidad se ha establecido como S o S (no disponible para
duplicacin).

INCREMENTO DE IDENTIDAD
Muestra el valor de incremento de una columna de identidad. Esta opcin slo se aplica a las
columnas cuya opcin Identidad se ha establecido como S o S (no disponible para
duplicacin).

ES ROWGUID
Muestra si SQL Server utiliza la columna como una columna ROWGUID. Este valor se puede
establecer como S slo 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.
FRMULA
Muestra la frmula 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
S
ISTEMAS
UNI

CREAR UNA CLAVE PRI NCI PAL(PRI MARY
KEY)
En el ejemplo de la tabla Productos, se configurar la columna ID_Producto como la
columna clave principal pulsando con el botn derecho del ratn 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 continuacin se ha
asignado una descripcin 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 botn derecho del ratn
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 mtodos lleva a la ventana
Propiedades, que se muestra en la siguiente figura.
SQL SERVER Implementacion Pag.51
S
ISTEMAS
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 ensea en el siguiente paso, al
guardar la tabla























GUARDAR LA TABLA Y ASI GNAR NOMBRE

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






2. Aparecer una venta de dilogo 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 diseado ser creada y su informacin 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
S
ISTEMAS
UNI

USO DE VALORES NULL

Un valor NULL es un valor desconocido al que se le refiere como NULL. La admisin 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 vacos ni
valores 0; sus valores verdaderos son desconocidos Podra necesitarse una columna con
nulos si la informacin que se necesita no es un dato obligatorio por ejemplo el dato
numero de celular en una tabla Alumnos no seria obligatorio llenarlo.
LA PROPI EDAD I DENTI TY DEFI NE UN CAMPO
COMO AUTONUMERI CO

Al crear una tabla se puede especificar una columna como columna de identidad aadiendo la
propiedad IDENTITY a la definicin de la columna. Si se crea una columna con la propiedad
IDENTITY,















SQL Server genera automticamente un valor de fila para esa columna, basndose 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 ms 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
S
ISTEMAS
UNI

VALORES PREDETERMI NADOS
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.

I NSERTAR REGI STROS 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
S
ISTEMAS
UNI

MODI FI CAR EL DI SEO DE UNA TABLA

Para modificar el diseo de una tabla como por ejemplo para :

Aadir o Eliminar campos a una tabla
Cambiar el tipo de datos a los campos
Cambiar el nombre a los campos
Modificar la longitud o tamao 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 Disear tabla


SQL SERVER Implementacion Pag.55
S
ISTEMAS
UNI

CREACI N Y USO DE UN DI AGRAMA DE BD

Las tablas tambin 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 botn derecho del ratn sobre Diagramas. Elegir Nuevo
diagrama de base de datos del men contextual para mostrar la pantalla de
bienvenida del Asistente para creacin 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
S
ISTEMAS
UNI
diagrama de la lista Tablas disponibles y despus pulsar Agregar. En este ejemplo
hemos agregado las tablas Productos,Categorias y Proveedores


















3. Pulsar Siguiente para visualizar la
pantalla Completando el Asistente para
creacin de diagramas de bases de
datos. Pulsar Finalizar si las tablas
seleccionadas son las correctas o pulsar
Atrs y hacer los cambios necesarios.






4. Despus de pulsar Finalizar se puede ver el diagrama de base de datos, como se
muestra en la figura siguiente.
SQL SERVER Implementacion Pag.57
S
ISTEMAS
UNI
PARA CREAR UNA RELACI N EN UN
DI AGRAMA DE BASE DE DATOS
En el diagrama de base de datos, haga clic en el selector de fila de la columna o combinacin
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 arrstrelo hasta la tabla
relacionada.






2. Suelte el botn del mouse. Aparece el cuadro de dilogo Crear relacin 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 dilogo Crear relacin,
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
S
ISTEMAS
UNI

COMPROBAR DATOS EXI STENTES
Seleccione la opcin para comprobar los datos existentes al crear una relacin si la
restriccin de FOREIGN KEY se debe aplicar tanto a los datos existentes como a los
datos nuevos
Aparecen varias casillas de verificacin en la parte inferior de la ventana. Seleccionar la
opcin Comprobar datos existentes al crear cuando se quiere que SQL Server
compruebe si los datos existentes cumplen la relacin 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.
EXI GI R RELACI N PARA I NSERT Y UPDATE
Aplica la restriccin a los datos INSERTADOS, ELIMINADOS o ACTUALIZADOS en la tabla
de la clave externa. Tambin 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
ACTUALI ZAR Y ELI MI NAR EN CASCADA LOS
CAMPOS RELACI ONADOS
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 relacin.
4. Guardar el diagrama con un nombre descriptivo pulsando el botn Guardar e introducien-
do un nombre cuando se solicite.

SQL SERVER Implementacion Pag.59
S
ISTEMAS
UNI

SQL SERVER Implementacion Pag.60
S
ISTEMAS
UNI
USO DE NDICES
QU ES UN NDICE?

Los ndices son una de las herramientas disponibles ms potentes para el diseador 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 rpidamente dnde 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 rpido a grandes cantidades de
informacin).
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 rpidamente la fila que contiene los datos que
se estn 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 estn ordenando, del nmero 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 podra haber muchas entradas del mismo Distrito.Sin embargo, al aadir las
columnas Direccin 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 travs de la direccin.

NDICES COMPUESTOS

Un ndice compuesto es un ndice que se define en ms de una columna. Se puede acceder a
un ndice compuesto usando una o ms 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
S
ISTEMAS
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 ms de una vez)

SQL Server obliga a que se cumpla la propiedad de unicidad (UNIQUE) de un ndice de una
columna o combinacin 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 restriccin PRIMARY KEY (clave
Primaria) o una restriccin 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 instruccin 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 ningn 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
S
ISTEMAS
UNI


ESTE SI STEMA OFRECE ALGUNAS VENTAJ AS Y ALGUNAS DESVENTAJ AS

Debido a que los datos de un ndice agrupado se almacenan ORDENADOS,los datos
estn disponibles, lo que puede resultar en un nmero menor de operaciones de
entrada/salida. Cualquier reduccin 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 estn ordenados
segn 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 segn 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 travs 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
ms de un ndice agrupado en una tabla

I NDI CES 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
informacin de ubicacin de filas de datos

.












CONSEJOS SOBRE INDICES
Orden Logico

Se deben usar los ndices con moderacin, 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 operacin de inserccin,
actualizacin y borrado en los datos.

No poner ndices en tablas pequeas.

Utilizar el menor nmero 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
S
ISTEMAS
UNI

CREACI N DE NDI CES

La creacin de ndices no es difcil. Se pueden crear ndices agrupados o no agrupados casi
del mismo modo usando los asistentes que suministra el Administrador corporativo
Par a c r ear un ndi c e
1. Abra el Diseador de tablas para la tabla que desee indizar, haga clic con el botn
secundario del mouse en el Diseador 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 slo 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 continuacin, haga
clic en Aceptar


Define un indice Agrupado
SQL SERVER Implementacion Pag.64
S
ISTEMAS
UNI
I MPORTAR UNA BASE DE DATOS
Otra opcin consiste en usar el servicio de transformacin 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 transformacin de datos figura entre las opciones del men
de SQL Server como Importar y exportar datos.

MI GRACI N DE UNA BASE DE ACCESS A SQL
SERVER

1. Abra el Asistente para transformacin de datos, seleccionando la opcin 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 cul es su
funcin y permite cliquear en
Siguiente para pasar al prximo paso

SQL SERVER Implementacion Pag.65
S
ISTEMAS
UNI
2. En la segunda ventana del Asistente se debe definir cul es el origen de los datos para
la transformacin. En la lista desplegable titulada Origen seleccionamos la opcin
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 Contrasea(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 vacos los campos Nombre de
usuario y Contrasea. 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 opcin por
defecto Microsoft OLE DB Provider for SQL Server es la que usaremos, vamos a
ingresar directamente la informacin solicitada en la parte inferior de la ventana; los
consabidos nombre de servidor y datos de autenticacin. La diferencia con las
ocasiones anteriores en
las que establecimos
una conexin 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
opcin <nuevo>







SQL SERVER Implementacion Pag.66
S
ISTEMAS
UNI

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

Si bien estos tamaos 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 opcin de seleccionar aquellas que se desee migrar. Seleccinelas 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 migracin
que en las opciones vistas antes para crear bases en el servidor se solicita el nombre
para la nueva base y los tamaos iniciales de los archivos de datos y de registro.
medida que le vayan quedando chicos), es bueno hacer una estimacin del tamao
requerido en funcin de la suma de los tamaos de cada tabla, calculando el tamao
de registro y multiplicndolo por el nmero de registros en la tabla. A eso hay que
agregarle un espacio prudencial para almacenar ndices.


asgnele 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 tamao
establecido para los datos.
El paso siguiente consiste, simplemente, en
decidir si se van a copiar la
de la base de datos de origen o si se
utilizarn 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. Tambin muestra un cono para cada tabla, que, si tiene una estrella en la
esquina superio
SQL SERVER Implementacion Pag.67
S
ISTEMAS
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 asistente
qu hacer con la operacin de migra
y Guardar
inmediatamente o programarla en un paquete DTS (data transformation service,
servicio de transformacin de datos) para una ejecucin 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
migracin, o hacer que se aplique una conversin a un tipo de datos diferente para
alguna columna. Pero en este ejemplo dejaremos las opciones de transformacin tal
como las infiere el Asistente.


















presenta, en esta anteltima pantalla, una serie de opciones referidas a
cin. Se muestran dos frames, titulados Cuando
. En el primero se ofrece la opcin de ejecutar la migracin
SQL SERVER Implementacion Pag.68
S
ISTEMAS
UNI
frame se da la opcin de crear el paquete DTS, independientemente de que la
ejecucin sea inmediata o diferida En este caso, optaremos por ejecutar la operacin
inmediatamente.



SQL SERVER Implementacion Pag.69
S
ISTEMAS
UNI
COPI AS DE SEGURI DAD 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 operacin 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
restauracin 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 COPI A DE SEGURI DAD
Para crear una copia de seguridad de base de datos :
1. Expanda un grupo de servidores y, a continuacin, un servidor.
2. Expanda Bases de datos, haga clic con el botn secundario del mouse en la base de
datos, seleccione Todas las tareas y, a continuacin, 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 Descripcin, escriba una descripcin 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
S
ISTEMAS
UNI














Si no aparece ningn 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 verificacin Programar para programar la
operacin de copia de seguridad destinada a una ejecucin posterior o peridica.
8. Finalmente pulse el boton Aceptar
SQL SERVER Implementacion Pag.71
S
ISTEMAS
UNI

CMO RESTAURAR UNA COPI A DE
SEGURI DAD DE UNA BASE DE DATOS
1. Expanda un grupo de servidores y, a continuacin, un servidor.
2. Expanda Bases de datos, haga clic con el botn secundario del mouse en la base de
datos, seleccione Todas las tareas y, a continuacin, 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
S
ISTEMAS
UNI


















7. Para Finalizar pulse el boton Aceptar
SQL SERVER Implementacion Pag.73
S
ISTEMAS
UNI
LA CAPACI DAD DE SQL SERVER

1. El tamao mximo de un nico archivo de base de datos es de 32 TB (treinta y dos
billones de bytes), y el tamao mximo 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 nmero de filas y el tamao total de la tabla est limitado solamente por el espacio
de almacenamiento disponible.
5. El nmero mximo 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
ms de 8.060 bytes en tal fila o actualizar una fila de tal forma que su tamao total de
fila exceda de 8.060, se genera un mensaje de error y no se puede realizar la
instruccin
6. Cada tabla puede contener un mximo 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
S
ISTEMAS
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 aplicacin.
En este captulo se introducirn conceptos bsicos del lenguaje de
consulta estructurado (SQL, Structured Query Language) y TransacT-
SQL (T-SQL) y se mostrarn las diferencias entre los dos lenguajes.
Este capitulo explica el lenguaje de definicin 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
S
ISTEMAS
UNI
EL LENGUAJ E SQL
SQL es un lenguaje de consulta y programacin 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 categoras de
programacin: DDL y DML. Se vern estas categoras 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 realizacin 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 programacin SQL estndar. Es el lenguaje principal
utilizado para comunicaciones entre aplicaciones y SQL Server. T-SQL proporciona las
posibilidades DDL y DML de SQL estndar adems de funciones extendidas,
procedimientos almacenados del sistema y con construcciones de programacin (tales
como IF y WHILE) con el fin de permitir mayor flexibilidad en la programacin. Las
capacidades de T-SQL continan 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
S
ISTEMAS
UNI
COMANDOS SQL











































SQL SERVER Implementacion Pag.77
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.78
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.79
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.80
S
ISTEMAS
UNI
EL ANALI ZADOR DE CONSULTAS

El Analizador de consultas es una aplicacion desde la cual podr ejecutar directamente
cualquier instruccin 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 conexin con un servidor (Se puede utilizar el Analizador de consultas SQL para mostrar
una herramienta basada en una interfaz grfica 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 contrasea para este
Ejemplo ingrese en el nombre de usuario sa y deje la contrasea en blanco
3. A continuacion pulse el boton Aceptar
SQL SERVER Implementacion Pag.81
S
ISTEMAS
UNI
Una vez conectado, el Analizador de consultas despliega su ventana principal.





























SQL SERVER Implementacion Pag.82
S
ISTEMAS
UNI
CREAR UNA BASE DE DATOS UTI LI ZANDO EL
ANALI ZADOR DE CONSULTAS


EL proceso es muy sencillo, como ejemplo creamos una base de datos llamada Ventas con
un tamao de 10 MB y limitada a 50 MB y un incremento de 5 MB. El registro de
transacciones lo creamos con un tamao 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

ABRI R SU BASE DE DATOS

1. Escribe el comando siguiente :
USE VENTAS
2. Seleccione el comando y pulse F5
SQL SERVER Implementacion Pag.83
S
ISTEMAS
UNI

Sintaxis del comando Create Database:

NAME = Nombre_del_archivo_lgico,
FILENAME = Nombre_del_archivo_en_el_sistema (path completo)
SIZE = TAMAO (inicial)
MAXSIZE = (tamao_mximo | UNLIMITED)
(Tamao mximo que puede tener la base de datos, UNLIMITED = tamao
ilimitado)
FILEGROWTH = Incremento del archivo (crecimiento en MB)

MODI FI CAR UNA BASE DE DATOS CREADA


COMANDO ALTER DATABASE

Aade o elimina archivos o grupos de archivos de una base de datos. Se puede usar
tambin 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

AADIR 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
S
ISTEMAS
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
-----------------------------------------------------------------------------------------------------------------------------

AADIR 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
S
ISTEMAS
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'

CAMBI AR UBI CACI N DE BASES DE DATOS
SQL SERVER DEL SERVI DOR
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 extensin mdf.

El archivo de transacciones que tiene extensin ldf.


Estos dos archivos se encuentran en "C:\Archivos de Progama\Microsoft SQL
Server\MSSQL\Data". Si por algn motivo necesitamos cambiar la ubicacin 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 ubicacin de los ficheros de las bases
de datos.
1. Para mover la ubicacin de los archivos de nuestras bases de datos vamos a
suponer que hemos realizado una instalacin 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 entraan peligro para el propio servidor.
3. Ahora veamos como mover todas las bases de datos una por una.
MOVER BASES DE DATOS DE USUARI OS
4. A continuacin 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
S
ISTEMAS
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 ubicacin 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 botn derecho en el servidor y sacamos la ventana de propiedades
3. Pulsamos clic en parmetros 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. Tambin podemos cambiar de la misma manera la ubicacin de los registros de error
11. Detenemos el SQL Server
12. Copiamos "master.mdf" y "masterlog.ldf" a la nueva localizacin
13. Reiniciamos el SQL Server

Con esto debera estar todo listo y nuestro servidor debera funcionar perfectamente pero
ahora con todos los ficheros de bases de datos en "D:\" como queramos.

Slo recordar una cosa ms. Estos cambios son una operacin de alto riesgo y tener copias
de seguridad de TODO antes de empezar es imprescindible.



SQL SERVER Implementacion Pag.87
S
ISTEMAS
UNI

CREACIN 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 ms llamado FechaNacimiento de tipo Fecha/Hora.(Datetime) Tambin crea un ndice
nico - no permite valores repetidos - formado por los tres campos.)

SQL SERVER Implementacion Pag.88
S
ISTEMAS
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 operacin 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
S
ISTEMAS
UNI
UTI LI ZAR EL TI PO DE DATOS
UNI QUEI DENTI FI ER EN UNA COLUMNA
Este ejemplo crea una tabla con una columna UNIQUEIDENTIFIER. Utiliza una restriccin
PRIMARY KEY para impedir que los usuarios inserten valores duplicados y utiliza la funcin
NEWID() de la restriccin 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 aade 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
S
ISTEMAS
UNI
COMO CREAR TABLAS ESTABLECI ENDO
RELACI ON

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(IDCATEGORA)
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
S
ISTEMAS
UNI
PARA COMPROBAR LA ESTRUCTURA DE LA NUEVA TABLA UTILICE EL
PROCEDIMIENTO ALMACENADO SP_HELP

EJ EMPLO :

/*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 explcitamente borrado, la instruccin DROP TABLE no lo hace.
DROP TABLE MATRICULAS
/* Elimina La Tabla Matriculas */

SQL SERVER Implementacion Pag.92
S
ISTEMAS
UNI
MODIFICAR TABLAS DE LA BASE DE DATOS
Entendemos por modificar una tabla, cambiar su estructura, es decir, aadir atributos,
borrarlos, o cambiar la definicin. La sentencia que permite modificar una tabla es la que
muestra

LA SENTENCIA ALTER TABLE

Su sintaxis es la descrita en el Cdigo fuente

ALTER TABLE tabla ADD atrib tipo NULL

Ejemplos

Aadir 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

Aadir una nueva columna con una restriccin

ALTER TABLE CONTACTOS ADD EDAD TINYINT NULL
CONSTRAINT ED_unique UNIQUE
Aadir una restriccin no validada a una tabla

ALTER TABLE CONTACTOS WITH NOCHECK
ADD CONSTRAINT Edad_check CHECK (EDAD > 1)
GO

Aadir varias columnas con restricciones

ALTER TABLE CONTACTOS ADD
/* Aadir una columna como clave primaria */
IDCONTACTO INT IDENTITY CONSTRAINT Idcontacto_pk PRIMARY KEY,

/* Aadir una columna con una restriccin 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]"),

/* Aadir una columna con valor por defecto */
column_e DECIMAL(3,3) CONSTRAINT column_e_default DEFAULT .081
GO

Aadir una columna con valor por defecto y NULL

ALTER TABLE VIDEOS
SQL SERVER Implementacion Pag.93
S
ISTEMAS
UNI
ADD FECHAESTRENO smalldatetime NULL
CONSTRAINT FECHA_C1 DEFAULT getdate() WITH VALUES

Deshabilitar y habilitar una restriccin

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)

-- Insercin que viola la restriccin
INSERT INTO empleado VALUES (3," Pat Jones" ,105000)

-- Deshabilitar la restriccin
ALTER TABLE empleado NOCHECK CONSTRAINT salario
INSERT INTO empleado VALUES (3," Pat Jones" ,105000)

-- Habilitar la restriccin
ALTER TABLE empleado CHECK CONSTRAINT salario
INSERT INTO empleado VALUES (4," Eric James" ,110000)

SQL SERVER Implementacion Pag.94
S
ISTEMAS
UNI
CREACIN DE NDICES

La creacin de ndices en SQL Server, as como en la mayora de los SGBDR existentes, se
debe realizar junto con la creacin 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 generacin del ndice dara un error. Sin embargo, SQL
Server permite la creacin de ndices, aunque la base de datos est cargada.

ALTER TABLE TABLA ADD CONSTRAINT K1 PRIMARY KEY (COD1, COD2)

Esta sentencia permite aadir una clave primaria en tabla, por los campos cod1 y cod2.

Para crear un ndice en la tabla todos, denominado Cdigo, por el campo cod_cliente, se
debe especificar el Cdigo fuente

CREATE INDEX CODIGO ON TODOS (COD_CLIENTE)

S adems queremos que el ndice no admita valores nulos, se debe ejecutar el Cdigo 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 Cdigo fuente Esta
sentencia se encarga de borrar el ndice cdigo 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 aadir
dos indices mas.

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

Si desea hacer una seleccin 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
S
ISTEMAS
UNI
EL LENGUAJE DE MANIPULACIN DE DATOS (DML)

Ya se ha visto en un captulo anterior el lenguaje de definicin de datos (DDL), que es el que
permite definir y modificar la estructura de un esquema. Veremos a continuacin el otro
lenguaje, el de manipulacin 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 manipulacin de datos es INSERT. Si SELECT nos permita
recuperar datos, INSERT nos va a permitir aadirlos al esquema, es decir, con esta sentencia
podemos aadir informacin a la base de datos. Recordemos que estamos en el modelo
relacional, por lo que la informacin se aadir a una tabla en forma de filas. Si slo
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 aadir la fila, atributos es una lista de atributos
separados por comas que determinan los atributos para los cuales se darn valores, y valores
especficos los valores que se darn para estos atributos, separados por comas.

Por ejemplo, si queremos aadir un nuevo cliente a nuestra base de datos, deberemos
ejecutar el Cdigo
.
INSERT INTO clientes (idcliente,nombre,apellidos)
VALUES ('409-99-9876', 'Pepe', 'Perez')

Destacar que si el valor a introducir es alfanumrico, deber ir encerrado entre comillas,
mientras que si es numrico 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 razn es que no hemos dado valor al atributo idcontacto, que ha sido definido como no
nulo. Por lo tanto, rectificamos el Cdigo fuente, para dar un valor al Cdigo fuente 56.

INSERT INTO authors (idcliente,nombre, apellidos,idcontacto)
VALUES ('409-99-9876', 'Pepe', 'Perez', 1)



LA SENTENCIA UPDATE

SQL SERVER Implementacion Pag.96
S
ISTEMAS
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 condicin donde tabla especifica la tabla donde se encuentran las filas que
queremos actualizar, condicin especifica la condicin que se debe cumplir para actualizar las
filas, y lo que viene a continuacin de

SET especifica la asignacin de los nuevos valores a los atributos. Por lo tanto se
actualizarn todas las filas que cumplan la condicin especificada. Si queremos cambiar el
nombre al cliente que hemos insertado en el anterior apartado, deberemos escribir el Cdigo
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(condicin 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 Cdigo 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 tambin las reglas de integridad referencial. La sintaxis es la siguiente:

DELETE FROM tabla
WHERE condicin

Donde tabla especifica la tabla sobre la cual queremos borrar las filas, y condicin especifica
la condicin que se debe cumplir para que se borren las filas. Si omitimos la condicin, se
borrarn todas las filas de la tabla, es decir, la sentencia que aparece en el Cdigo 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 Cdigo fuente obteniendo el siguiente resultado:

SQL SERVER Implementacion Pag.97
S
ISTEMAS
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 Cdigo 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
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.99
S
ISTEMAS
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 espaol para hacer que los ejemplos que se desarrollen
en este manual sean mas ilustrativos y didacticos a continucion presentamos el diseo en el
siguiente diagrama
SQL SERVER Implementacion Pag.100
S
ISTEMAS
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,
NombreCompaa varchar(40),NombreContacto varchar(30),
CargoContacto varchar(30),Direccin varchar(60),
Ciudad varchar(15),
Pas varchar(15),
Telfono varchar(24),
Fax varchar (24))


CREATE TABLE Categoras (IdCategora int NOT NULL IDENTITY
Primary key,NombreCategora varchar(15),Descripcin text)




CREATE TABLE Proveedores(IdProveedor int NOT NULL IDENTITY
PRIMARY KEY,NombreCompaa varchar(40),Direccin
varchar(60),Ciudad varchar(15),Telfono 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 O
DELETE
CASCADE
N


SQL SERVER Implementacion Pag.101
S
ISTEMAS
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
S
ISTEMAS
UNI
MUESTRA DEL CONTENIDO REGISTROS DE CADA
TABLA




EMPLEADOS
CATEGORIAS
CLIENTES
PROVEEDORES
SQL SERVER Implementacion Pag.103
S
ISTEMAS
UNI







PRODUCTOS
















PEDIDOS

DETALLES DE PEDIDOS
SQL SERVER Implementacion Pag.104
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.105
S
ISTEMAS
UNI
LA SENTENCIA SELECT

La sentencia Select es una sentencia SQL, que pertenece al conjunto del Lenguaje de
Manipulacin 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 <condicin>]
[ORDER BY <atributos>]


Donde las maysculas representan palabras reservadas, y lo encerrado entre corchetes es
opcional, puede ser omitido. Una vez vista la anterior forma de representacin, vamos a
detenernos en la sintaxis de la sentencia Select. Se compone de tres partes:

SELECT <atributos>: permite hacer una proyeccin de las tablas, es decir, seleccionar
los campos que deseamos recuperar de la base de datos, separados por comas. Si se
especifica el smbolo *, se obtendrn todos los campos de la tabla.

FROM <tablas>: permite especificar la tabla de la cual se desean obtener los datos. Si
se especifica ms de una tabla, stas irn separadas por comas.

WHERE <condicin>: permite establecer una condicin de recuperacin de las filas de
la/s tabla/s. Slo se obtendrn aquellas Registros que verifiquen dicha condicin, que
ser opcional.

En el caso de que se omita esta parte, se recuperarn todas las filas.



GROUP BY <atributos>: permite establecer una seleccin de campos cuando se
utilizan funciones escalares o de conteo (ya se ver ms adelante lo que significa.

HAVING <condicin>: establece una condicin para los atributos obtenidos como
resultado de la aplicacin 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 clusula FROM, ser conveniente
denotar los campos de la clusula 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 ms de una tabla,
se sepa en cada momento a cual de ellos nos estamos refiriendo, evitando en este caso el
problema de ambigedad.


SQL SERVER Implementacion Pag.106
S
ISTEMAS
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
S
ISTEMAS
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 NOMBRECOMPAA,DIRECCIN,CIUDAD,PAIS,FAX FROM CLIENTES
WHERE FAX IS NULL

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

SELECT NOMBRECOMPAA,DIRECCIN,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,NOMBRECOMPAIA,DIRECCIN FROM CLIENTES WHERE
NOMBRECOMPAIA 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
S
ISTEMAS
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 NOMBRECOMPAIA,PAIS FROM CLIENTES
WHERE PAIS=ALEMANIA OR PAIS=FRANCIA

17. Mostrar los clientes cuyo pais sea Italia,brasil,francia,irlanda,espaa y suecia

SELECT NOMBRECOMPAIA,PAIS FROM CLIENTES
WHERE PAIS IN(ITALIA,BRASIL,FRANCIA,IRLANDA,ESPAA,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
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.110
S
ISTEMAS
UNI
CONSULTAS MULTITABLA
En este tema vamos a estudiar las consultas multitabla llamadas as porque estn basadas
en ms de una tabla.
El SQL de Microsoft J et 4.x soporta dos grupos de consultas multitabla:
la unin de tablas
la composicin de tablas

LA UNIN DE TABLAS
Esta operacin 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 vara son las filas, adems queremos obtener una lista de libros (las
columnas de una de las tablas) con las filas que estn tanto en libros nuevos como las que
estn en libros antiguos, en este caso utilizaremos este tipo de operacin.
Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o
tablas lgicas (resultados de una consulta), esto nos permite utilizar la operacin con ms
frecuencia ya que pocas veces tenemos en una base de datos tablas idnticas en cuanto a
columnas. El resultado es siempre una tabla lgica.
Por ejemplo queremos en un slo listado los productos cuyas existencias sean iguales a
cero y tambin los productos que aparecen en pedidos del ao 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 cdigos de los productos con existencias cero (con una consulta), por otra parte los
cdigos de los productos que aparecen en pedidos del ao 90 (con otra consulta), y luego
unimos estas dos tablas lgicas.
El operador que permite realizar esta operacin es el operador UNION.

















SQL SERVER Implementacion Pag.111
S
ISTEMAS
UNI
LA COMPOSICIN DE TABLAS
La composicin 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 quedara de la siguiente forma con la composicin:











A diferencia de la unin la composicin 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 adems queremos que aparezcan en la
misma lnea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo
expuesto a continuacin, hemos seleccionado las filas que nos interesan).











Existen distintos tipos de composicin, aprenderemos a utilizarlos todos y a elegir el tipo
ms apropiado a cada caso.
Los tipos de composicin de tablas son:
El INNER JOIN
El LEFT / RIGHT JOIN

SELECT *
FROM PEDIDOS,CLIENTES
WHERE PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE
SQL SERVER Implementacion Pag.112
S
ISTEMAS
UNI
Combinamos todos los pedidos con todos los clientes pero luego seleccionamos los que
cumplan que el cdigo de cliente de la tabla de pedidos sea igual al cdigo 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 clusula 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
seleccin.
Normalmente emparejamos tablas que estn 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 ms eficiente utilizar otro tipo de composicin,
el INNER JOIN.
EL INNER JOIN
El INNER J OIN es otro tipo de composicin de tablas, permite emparejar filas de distintas
tablas de forma ms 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 condicin de emparejamiento, para cada fila de
una de las tablas busca directamente en la otra tabla las filas que cumplen la condicin, con
lo cual se emparejan slo 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 clusula 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 numricos deben ser de tipos similares. Por ejemplo,
se puede combinar campos AutoNumrico(IDENTIDAD) y INT puesto que son tipos
similares, sin embargo, no se puede combinar campos de tipo INT y FLOAT. Adems las
columnas no pueden ser de tipo TEXT ni IMAGE
COMP representa cualquier operador de comparacin ( =, <, >, <=, >=, o <>) y se utiliza
para establecer la condicin de emparejamiento.
Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y
OR poniendo cada condicin entre parntesis. Ejemplo:

SELECT *
FROM PROVEEDORES INNER JOIN PRODUCTOS ON PRODUCTOS
PROVEEDORES.IDPROVEEDOR AND PROVEEDORES.IDPROVEEDOR =
PRODUCTOS.IDPROVEEDOR
SQL SERVER Implementacion Pag.113
S
ISTEMAS
UNI

Se pueden combinar ms de dos tablas En este caso hay que sustituir en la sintaxis una tabla
por un INNER J OIN 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 J OIN completo, tambin 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 J OIN 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
S
ISTEMAS
UNI
El LEFT JOIN y RIGHT JOIN son otro tipo de composicin de tablas, tambin denominada
composicin externa. Son una extensin del INNER JOIN.
INNER J OIN) es una composicion interna ya que todos los valores de las filas del resultado
son valores que estn en las tablas que se combinan.
Con una composicin interna slo se obtienen las filas que tienen al menos una fila de la
otra tabla que cumpla la condicin, 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 condicin
empleados.oficina =oficinas.oficina ser siempre nula para esos empleados.

Si utilizamos el INNER J OIN
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 tambin aparezcan las filas que no tienen una fila
coincidente en la otra tabla, utilizaremos el LEFT o RIGHT J OIN.
La sintaxis del LEFT J OIN es la siguiente:


La descripcin de la sintaxis es la misma que la del INNER J OIN (ver pgina anterior), lo
nico que cambia es la palabra INNER por LEFT (izquierda en ingls).

Esta operacin consiste en aadir al resultado del INNER J OIN 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 J OIN es la siguiente:


SQL SERVER Implementacion Pag.115
S
ISTEMAS
UNI
La sintaxis es la misma que la del INNER J OIN (ver pgina anterior), lo nico que cambia es
la palabra INNER por RIGHT (derecha en ingls).

Esta operacin consiste en aadir al resultado del INNER J OIN 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
adems aparece una fila por cada oficina que no est asignada a ningn empleado con los
datos del empleado a nulos.

Una operacin LEFT J OIN o RIGHT J OIN se puede anidar dentro de una operacin INNER
J OIN, pero una operacin INNER J OIN no se puede anidar dentro de LEFT J OIN o RIGHT
J OIN. Los anidamientos de J OIN 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 J OINs) dentro de
la clusula 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 aadimos los clientes de cada representante, as obtenemos los clientes
que tienen un representante asignado y los datos de la oficina del representante asignado.
Si hubiramos puesto INNER en vez de LEFT no saldran los clientes que tienen el
empleado 110 (porque no tiene oficina y por tanto no aparece en el resultado del LEFT J OIN
y por tanto no entrar en el clculo del INNER J OIN con clientes).
SQL SERVER Implementacion Pag.116
S
ISTEMAS
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.NOMBRECOMPAIA,STOCK FROM
PRODUCTOS,CATEGORAS,PROVEEDORES
WHERE PRODUCTOS.IDCATEGORIA=CATEGORIAS.IDCATEGORIA AND
PRODUCTOS.IDPROVEEDOR=PROVEEDORES.IDPROVEEDOR

CON INNER J OIN
SELECT
PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CATEGORIAS
.NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAIA,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.NOMBRECOMPAIA,E
MPLEADOS.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
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.118
S
ISTEMAS
UNI
FUNCIONES DE SQL SERVER

FUNCIONES DE TIPO FECHA

Estas funciones escalares realizan una operacin sobre un valor de fecha y hora de entrada,
y devuelven un valor de cadena, numrico 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 nmero de dias,meses o aos 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

S
ISTEMAS
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 funcin GETDATE devuelve la fecha actual; sin embargo, la fecha completa no es siempre
la informacin que se necesita para la comparacin (a menudo, slo 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
S
ISTEMAS
UNI
DAY
Devuelve un entero que representa la parte del da de la fecha especificada.

Sintaxis
DAY ( fecha )

En este ejemplo se devuelve el nmero del da 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 nmero 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 ao de la fecha especificada.

Sintaxis
YEAR ( Fecha )

Este ejemplo devuelve el nmero del ao de la fecha 03/12/1998.

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



SQL SERVER Implementacion Pag.121
S
ISTEMAS
UNI
UTILIZAR FUNCIONES MATEMTICAS
Una funcin matemtica realiza una operacin matemtica en expresiones numricas y
devuelve el resultado de la operacin. Las funciones matemticas operan sobre datos
numricos suministrados por el sistema Microsoft SQL Server (decimal, integer, float, real,
money, smallmoney, smallint y tinyint). La precisin de las operaciones integradas para el tipo
de datos float es, de forma predeterminada, de seis lugares decimales.

ROUND
Devuelve una expresin numrica, redondeada a la longitud o precisin 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 ms pequeo mayor o igual que la expresin numrica dada.

Sintaxis
CEILING ( expressionNumerica )

Este ejemplo muestra valores numricos positivos, negativos y cero con la funcin 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 ms grande menor o igual que la expresin numrica dada.

Sintaxis
FLOOR ( expresionNumerica )
Este ejemplo muestra valores numricos positivos, negativos y valores de moneda con la
funcin 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 expresin indicada elevada a la potencia especificada.
SQL SERVER Implementacion Pag.122
S
ISTEMAS
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 raz cuadrada de la expresin especificada.

Sintaxis
SQRT ( expressionNumerica )

DECLARE @myvalue float
SET @myvalue =16

SELECT SQRT(@myvalue)

Devuelve 4
UTILIZAR FUNCIONES DE TEXTOS
Estas funciones escalares realizan una operacin sobre una cadena de entrada y devuelven
un valor de cadena o un valor numrico.

UPPER
Convierte de minsculas a maysculas

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 maysculas a minusculas
Sintaxis
LOWER ( expressionTexto )
Muestra los nombres de los clientes en minusculas
SELECT LOWER(NOMBRECOMPAIA) FROM CLIENTES

SQL SERVER Implementacion Pag.123
S
ISTEMAS
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 ms 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 ms a la derecha
de cada nombre del producto.

SELECT RIGHT(NOMBREPRODUCTO, 5) FROM PRODUCTOS







LEN
Devuelve el nmero de caracteres de la expresin 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
S
ISTEMAS
UNI
SUBSTRING
Devuelve una parte de una expresin de caracteres

Sintaxis
SUBSTRING ( expressionTexto , Posicion inicial , numeroCaracteres)

En el ejemplo siguiente se muestra cmo obtener parte de una cadena de caracteres.
En la tabla Empleados, esta consulta obtiene los apellidos en una columna y slo la
primera inicial en la segunda columna.

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

REPLACE
Reemplaza por una tercera expresin todas las apariciones de la segunda expresin de
cadena proporcionada en la primera expresin 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 posicin inicial de la primera aparicin de un patrn en la expresin especificada
o ceros si el patrn no se encuentra, con todos los tipos de datos de texto y caracteres.

Sintaxis
PATINDEX ( '%pattern%' , expression )

En este ejemplo se busca la posicin en que comienza el patrn "secas" en una fila
especfica 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 nmero 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 posicin 2 (la letra b) e insertar
la segunda cadena en el punto de eliminacin.
SELECT STUFF('abcdef', 2, 3, 'ijklmn')

SQL SERVER Implementacion Pag.125
S
ISTEMAS
UNI
El siguiente es el conjunto de resultados:
---------
aijklmnef

STR
Devuelve datos de tipo carcter obtenidos a partir de datos numricos.
Sintaxis
STR ( expressionNumerica )

En el ejemplo siguiente se convierte una expresin formada por cinco dgitos y un
separador decimal en una cadena de caracteres de seis posiciones. La parte
fraccionaria del nmero 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 funcin de cadena que convierte un cdigo ASCII int en un carcter.
Sintaxis
CHAR ( expresionNumerica )

Este ejemplo utiliza CHAR(13) para imprimir la informacin de nombre, direccin y
ciudad en lneas 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
S
ISTEMAS
UNI
Seattle WA

ASCII
Devuelve el cdigo ASCII del carcter ms a la izquierda de una expresin de caracteres.
Sintaxis
ASCII ( expressionTexto )

SELECT ASCII(A)

Devuelve 65

REPLICATE
Repite una expresin de caracteres un nmero 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
S
ISTEMAS
UNI
FUNCIONES DE CONVERSION

CAST y CONVERT
Convierten una expresin de un tipo de datos en otro. CAST y CONVERT proporcionan
funciones similares.
Este ejemplo concatena expresiones mediante la funcin de conversin 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 clusula 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 Ao 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
S
ISTEMAS
UNI
COMANDOS SET
El lenguaje de programacin Transact-SQL ofrece varias instrucciones SET que alteran el
tratamiento de informacin de SQL SERVER..
Las instrucciones SET se dividen en las siguientes categoras:
Categora Altera la configuracin de la sesin 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.
Ejecucin de consultas Ejecutar y procesar consultas.
Valores de SQL-92 Utilizar la configuracin predeterminada de SQL-
92.
Estadsticas Presentar informacin estadstica.
Transacciones Tratar transacciones de SQL Server.

SET DATEFIRST
Establece como primer da de la semana un nmero del 1 al 7.

Sintaxis
SET DATEFIRST {number | @number_var }

Es un entero que indica el primer da de la semana y puede tener uno de los valores
siguientes.
Valor Primer da de la
semana:
1 Lunes
2 Martes
3 Mircoles
4 J ueves
5 Viernes
6 Sbado
7 (predeterminado,
Ingls EE.UU.)
Domingo

Puede utilizar la funcin @@DATEFIRST para conocer el valor actual de SET DATEFIRST.
SELECT @@DATEFIRST

En este ejemplo se indica el da de la semana correspondiente a un valor de fecha y se
muestra el efecto de cambiar la opcin DATEFIRST.

SET DATEFIRST 7
GO
SELECT CAST('1/1/99' AS DATETIME), DATEPART(DW, '1/1/99')
SQL SERVER Implementacion Pag.129
S
ISTEMAS
UNI
SET DATEFORMAT
Determina el orden de las partes de la fecha (mes/da/ao) para escribir datos de tipo
datetime o smalldatetime.
Sintaxis
SET DATEFORMAT {format | @format_var }
Este valor slo se utiliza en la interpretacin de las cadenas de caracteres cuando se
convierten en valores de fecha. No tiene ningn efecto en la presentacin 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 Ao
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 Ao 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 explcitos 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 cmo se
puede usar la opcin SET IDENTITY_INSERT para llenar un hueco en los valores de
identidad causado por una instruccin DELETE.




SQL SERVER Implementacion Pag.130
S
ISTEMAS
UNI
1. Tenemos la siguiente tabla









2. Eliminamos la categoria de codigo 7

DELETE FROM CATEGORAS WHERE IDCATEGORA = 7
GO
SELECT * FROM CATEGORAS
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, lnea 1
No se puede insertar un valor explcito en la columna de identidad de la tabla
'Categoras' cuando IDENTITY_INSERT es OFF

Para solucionar este problema usaremos la siguiente instruccin

SET IDENTITY_INSERT CATEGORAS ON
GO
INSERT INTO CATEGORAS(IDCATEGORA, NOMBRECATEGORA) VALUES(7,
'FRUTAS/VERDURAS')
GO
/*EXAMINE LOS RESULTADOS*/
SELECT * FROM CATEGORIAS

SET LANGUAGE
Especifica el idioma de entorno de la sesin. El idioma de la sesin 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 espaol

SET LANGUAGE spanish
GO

SQL SERVER Implementacion Pag.131
S
ISTEMAS
UNI
SET NOCOUNT
Hace que deje de devolverse como parte de los resultados el mensaje que indica el nmero
de filas afectado por una instruccin Transact-SQL.

Sintaxis
SET NOCOUNT {ON | OFF }
Cuando SET NOCOUNT es ON, no se devuelve el nmero de filas afectado por una
instruccin Transact-SQL. Cuando SET NOCOUNT es OFF, s se devuelve ese nmero.
La funcin @@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
nmero 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
nmero de filas especificado.

SET ROWCOUNT detiene el procesamiento cuando se alcanza el nmero 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 nmero de filas que devuelve la actualizacin 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 continuacin se establece 4 en ROWCOUNT y se actualizan todas las filas con anticipos de
10 $ o ms.
SET ROWCOUNT 4
GO
UPDATE PEDIDOS SET CARGO = 7.5 WHERE CARGO >= 10
GO
SQL SERVER Implementacion Pag.132
S
ISTEMAS
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
S
ISTEMAS
UNI



SQL SERVER Implementacion Pag.134
S
ISTEMAS
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 PAS= 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
S
ISTEMAS
UNI
FUNCIONES ESCALARES PARA SELECT

Entendemos por funciones escalares, todas aquellas que permiten realizar operaciones de
conteo de filas, suma de atributos, obtencin de medias, etc. Dichas funciones se especifican
a continuacin 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 condicin en la clusula WHERE.

Si ahora queremos obtener la suma total de todos los pedidos realizados por el cliente cuyo
cdigo es "ANTON", debemos realizar la misma consulta, pero especificando una condicin
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, direccin, y queremos saber todos los clientes
que tenemos, deberemos realizar un count, para obtener todas el nmero de filas de la tabla
ejecutamos el Cdigo fuente

SELECT COUNT(IDCLIENTE) FROM CLIENTES

En el anterior ejemplo, al existir el mismo nmero de filas, sea cual sea el atributo que
seleccionemos, podramos haber escogido cualquier otro. En general, se suele escribir el
Cdigo fuente

SELECT COUNT(*) FROM CLIENTES

Si ahora queremos saber el nmero de clientes que viven en Madrid, deberemos realizar un
conteo de todas las filas con la condicin 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 condicin en la clusula WHERE. Al resultado de la
bsqueda le llamaremos Caros.

SELECT COUNT(*) AS CAROS FROM PRODUCTOS WHERE PRECIOUNIDAD >
20

SQL SERVER Implementacion Pag.136
S
ISTEMAS
UNI
FUNCION AVG

Realiza una media aritmtica 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, descripcin,
precio y cantidad _ pedida, y queremos saber la cantidad media pedida de todos los
materiales, deberemos realizar una media aritmtica, 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
continuacin la divide por el nmero total de filas accedidas, es decir, realiza la media
aritmtica.
Volviendo a nuestra cultural base de datos SUPERMERCADOSNEPTUNO, si queremos
saber la media del precio de los ttulos que tenemos disponibles, deberemos ejecutar el
Cdigo fuente

SELECT AVG(PRECIOUNIDAD) AS PROMEDIO FROM PRODUCTOS

FUNCION MAX

Obtiene el mximo valor del atributo especificado, de entre todas las filas seleccionadas
mediante la sentencia SQL.

Supngase, por ejemplo, que tenemos la tabla de materiales descrita anteriormente. Si
queremos saber el material mas caro, deberemos realizar un SELECT con la clusula Max,
que obtenga el mayor valor para el atributo precio de todas las filas.

Para nuestro ejemplo, si queremos saber cual es el libro ms caro, ejecutaremos el Cdigo
fuente

SELECT MAX(PRECIOUNIDAD) AS CARO FROM PRODUCTOS

FUNCION MIN

Obtiene el mnimo valor del atributo especificado, de entre todas las filas seleccionadas
mediante la sentencia SQL. Si queremos saber cual es el PRODUCTOS ms barato de
nuestra base de datos, deberemos ejecutar el Cdigo fuente

SELECT MIN(PRECIOUNIDAD) AS BARATO FROM PRODUCTOS

SQL SERVER Implementacion Pag.137
S
ISTEMAS
UNI
LA CLAUSULA COMPUTE
Esta clausula aade 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
S
ISTEMAS
UNI
LA CLAUSULA GROUP BY

Se pueden obtener subtotales con la clusula GROUP BY. Una consulta con una clusula
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 agrupacin.

Ejemplos

1. Mostrar el total de clientes que tiene la empresa en cada pais

SELECT PAS,COUNT(IDCLIENTE) AS [TOTAL CLIENTES]
FROM CLIENTES
GROUP BY PAS
ORDER BY COUNT(IDCLIENTE) DESC










2. Mostrar el precio del producto mas caro de cada categoria

SELECT NOMBRECATEGORA,MAX(PRECIOUNIDAD) AS [Mas Caros]
FROM CATEGORAS
INNER JOIN PRODUCTOS ON
CATEGORAS.IDCATEGORA=PRODUCTOS.IDCATEGORA
GROUP BY NOMBRECATEGORA









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
S
ISTEMAS
UNI
4. Mostrar el total de compras por cliente en el ao 1995

SELECT NOMBRECOMPAA,
YEAR(FECHAPEDIDO) AS AO,
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 NOMBRECOMPAA,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
S
ISTEMAS
UNI

7. Mostrar el total de ventas del MES actual del AO 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 AO Actual

SELECT YEAR(FECHAPEDIDO) AS AO,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 PASDESTINATARIO,SUM(CANTIDAD*CANTIDAD) AS TOTAL
FROM PEDIDOS
INNER JOIN [DETALLES DE PEDIDOS]
ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO
GROUP BY PASDESTINATARIO
ORDER BY SUM(CANTIDAD*CANTIDAD)DESC
SQL SERVER Implementacion Pag.141
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.142
S
ISTEMAS
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 seleccin, en la clusula WHERE o en la clusula
HAVING de la consulta principal.
Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando
que aparece encerrada entre parntesis, no puede contener la clusula ORDER BY, ni
puede ser la UNION de varias sentencias SELECT, adems tiene algunas restricciones en
cuanto a nmero de columnas segn 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 ms fciles 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 (algn, alguno en ingls) y el test ALL (todos en ingls).

La subconsulta debe devolver una nica columna sino se produce un error.
Se evala la comparacin 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 ningn valor, el test any devuelve falso.
si el test de comparacin es falso para todos los valores de la columna, ANY devuelve
falso.
Si el test de comparacin no es verdadero para ningn 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
S
ISTEMAS
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 evala la comparacin 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 ningn valor el test ALL devuelve el valor verdadero.
(Ojo con esto!)
Si el test de comparacin es falso para algn valor de la columna, el resultado es
falso.
Si el test de comparacin no es falso para ningn 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 expresin 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, NO
FROM EMPLEADOS
WHERE OFICINA IN (SELECT OFICINA FROM OFICINAS WHERE REGION = 'ESTE')

Con la subconsulta se obtiene la lista de los nmeros de oficina del este y la consulta princip
obtiene los empleados cuyo nmero de oficina sea uno de los nmeros de oficina d

SQL SERVER Implementacion Pag.144
S
ISTEMAS
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 mayora 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 ningn nombre de columna.
En la subconsulta se pueden poner las columnas que queramos en la lista de
seleccin (hemos utilizado el *).Hemos aadido una condicin 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 seleccin, o en las clusulas
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 ms de un nivel de anidamiento.
4. La subconsulta sufre una serie de restricciones segn el lugar donde se encuentre.
5. Las condiciones asociadas a las subconsultas son las siguientes:
6. el test de comparacin con subconsulta el test ANY ,ALL, IN, EXISTS

SQL SERVER Implementacion Pag.145
S
ISTEMAS
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 NOMBRECATEGORA, NOMBREPRODUCTO, PRECIOUNIDAD
FROM PRODUCTOS
INNER JOIN CATEGORAS ON
PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA
WHERE PRECIOUNIDAD IN (SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS
WHERE PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA)











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.NOMBRECOMPAA,CLIENTES.TELFONO 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
S
ISTEMAS
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 compaas y los contactos de todos los clientes que han realizado
un pedido en el segundo trimestre de 1995

SELECT DISTINCT
NOMBRECONTACTO,NOMBRECOMPAIA,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
S
ISTEMAS
UNI S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.148

SQL SERVER Implementacion Pag.148
S
ISTEMAS
UNI
USO DE CREATE FUNCTION
Microsoft agreg nuevas caractersticas a su producto SQL SERVER 2000, y lo ms
interesante para los programadores del SQL es la posibilidad de hacer funciones definidas
por el usuario. La adicin de funciones al lenguaje del SQL solucionara los problemas de
reutilizacin del cdigo 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 parmetros 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 funcin escalar es la siguiente:
CREATE FUNCTION NombreFuncion
( [@nombreParameterparameterN])
RETURNS tipoValorRetorno
[AS]
BEGIN
<instrucciones>
RETURN expresionEscalar
END
EJ EMPLO:
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
S
ISTEMAS
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 LNEA

Las funciones de tabla en linea son las funciones que devuelven la salida de una simple
declaracin SELECT. La salida se puede utilizar adentro de joins o consultas como si
fuera un tabla de estndar.

CREATE FUNCTION ClientesPorPais(@Pais varchar(25) )
RETURNS TABLE
AS
RETURN (SELECT * FROM Clientes WHERE Pas = @pais)

Creamos la funcion y luego invocaremos a la funcion de esta forma:

SELECT * FROM DBO.CLIENTESPORPAIS('ALEMANIA')





SQL SERVER Implementacion Pag.150
S
ISTEMAS
UNI
ALTER FUNCTION

Modifica una funcin existente definida por el usuario, creada anteriormente por la ejecucin
de la instruccin CREATE FUNCTION, sin cambiar los permisos y sin que afecte a ninguna
otra funcin, procedimiento almacenado o desencadenador dependientes.

EJ EMPLO :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 PEDIDOSAO(@AO AS INTEGER)
SQL SERVER Implementacion Pag.151
S
ISTEMAS
UNI
RETURNS TABLE
AS RETURN
SELECT IDPEDIDO, FECHAPEDIDO, NOMBRECOMPAA, 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)=@AO


Invocando a la funcion :SELECT * FROM DBO.PEDIDOSAO(1995)



ELIMINAR UNA FUNCION

Para eliminar una funcion ejecute el comando DROP FUNCTION

Ejemplo:

DROP FUNCTION DBO.PEDIDOSAO







SQL SERVER Implementacion Pag.152
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.153
S
ISTEMAS
UNI
CREACION DE VISTAS CON CREATE VIEW

Una vista es una tabla virtual que est definida por una consulta que consiste en una
instruccin SELECT. Esta tabla virtual est creada con datos de una o ms 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 instruccin SQL previamente
definida. Cuando se accede a la vista, el optimizador de consultas de SQL Server une la
instruccin SQL que se ejecuta en ese momento con la consulta que se use para definir la
vista.

EJ EMPLO:

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 instruccin SELECT que define una vista slo 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
S
ISTEMAS
UNI

SQL Server asigna una serie de restricciones en la creacin y el uso de las vistas.
Estas restricciones incluyen las siguientes:
Limitacin de columnas: Una vista puede hacer referencia hasta a 1024 columnas de
una tabla. Si se necesita hacer referencia a un nmero mayor de columnas, se tendrn
que usar otros mtodos.

Limitacin 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.

Limitacin 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 actualizacin, modificacin, 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

Limitacin 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.

Limitacin de la orden SELECT: La orden SELECT de una vista no puede contener
una clusula 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
S
ISTEMAS
UNI
EJEMPLOS DE VISTAS

1. Mostrar el nombre y precio del producto mas caro de cada categoria

CREATE VIEW MasCaroCategoria
AS
SELECT NOMBREPRODUCTO,PRECIOUNIDAD,NOMBRECATEGORA
FROM PRODUCTOS
INNER JOIN CATEGORAS ON
PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA
WHERE
PRECIOUNIDAD =(SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS WHERE
PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA)










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
S
ISTEMAS
UNI
3. Se desea obtener un reporte de los mejores cliente por ao para ello utilizaremos 2
vistas la primera nos permitira obtener el total de pedidos por ao de cada cliente y la
segunda vista nos mostrara el resultado final mostrandonos el mejor cliente de cada ao
en base a a la mayor cantidad de pedidos comprados en cada ao
Primera Vista:
CREATE VIEW TOTALPEDIDOSANUALES
AS
SELECT NOMBRECOMPAA, YEAR(FECHAPEDIDO) AS AO, COUNT(IDPEDIDO) AS
TOTAL FROM CLIENTES
INNER JOIN PEDIDOS ON CLIENTES.IDCLIENTE=PEDIDOS.IDCLIENTE
GROUP BY NOMBRECOMPAA, YEAR(FECHAPEDIDO)








Segunda Vista:
CREATE VIEW MEJORCLIENTEAO
AS
SELECT AO AS FECHA, NOMBRECOMPAA, TOTAL
FROM TOTALPEDIDOSANUALES
WHERE STR(AO) + STR(TOTAL)
IN (SELECT STR(AO) + STR(MAX(TOTAL))
FROM TOTALPEDIDOSANUALES
GROUP BY AO )

SQL SERVER Implementacion Pag.157
S
ISTEMAS
UNI
LAS SENTENCIAS CONDICIONALES
Las sentencias condicionales son aquellas que permiten discriminar entre diversas
sentencias, segn se cumpla el valor de una expresin lgica. Existen dos tipos de sentencias
condicionales.
La primera de ellas tiene la siguiente sintaxis:

IF expresion_logica
sentencia1
[ELSE sentencia2]

La sentencia 1 slo se ejecutar si el resultado de la evaluacin de la expresin lgica 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
debern ir encerradas entre las palabras reservadas BEGIN y END.

Si deseamos obtener los ttulos almacenados cuando stos superen las 10 unidades, y el
nmero de ellos cuando no lo superen, ejecutaremos el Cdigo 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 slo se ejecuta cuando
se cumple la condicin (SELECT count (*) FROM Productos) >10. En otro caso, se ejecutar
la rama ELSE, que devuelve el nmero de ttulos almacenados en la tabla titles.

La anterior sentencia compara la expresin 1, con el resto de expresiones especificadas a
continuacin de la palabra reservada WHEN. Si alguna de estas expresiones se cumple, se
devolver el resultado correspondiente especificado a continuacin de la palabra reservada
THEN. Si llegados al final, no ha verificado ninguna de las expresiones, se devolver el
resultado especificado a continuacin del ELSE.
Por ejemplo, si queremos saber el nombre de los estados de los clientes, en lugar de las
iniciales, podemos ejecutar el Cdigo fuente

SELECT NombreCompaa,
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 NombreCompaa
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
S
ISTEMAS
UNI
SENTENCIAS ITERATIVAS

Una sentencia iterativa es aquella que permite ejecutar una o varias sentencias de manera
repetida, mientras se cumpla una condicin lgica. 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 expresin
lgica. La clusula BREAK, permite romper el bucle, y abandonarlo, aunque se cumpla la
expresin lgica, mientras que CONTINUE permite ejecutar de nuevo las sentencias desde el
comienzo del bucle, ignorando aquellas que vienen a continuacin del CONTINUE.

EJ EMPLO

En este ejemplo, si el promedio de precio es menor de 30 $, el bucle WHILE dobla los precios
y, a continuacin, selecciona el precio mximo. Si el precio mximo es menor o igual que 50
$, el bucle WHILE se reinicia y dobla los precios de nuevo. Este bucle contina la duplicacin
de precios hasta que el precio mximo sea mayor que 50 $ y, a continuacin, sale del bucle
WHILE e imprime un mensaje

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
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.160
S
ISTEMAS
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 ms potentes, porque permiten almacenar funciones y procedimientos compuestos por
varias instrucciones, introducir saltos, bucles, etc. Tambin 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
cdigo se pasa por parmetro.

CREATE PROCEDURE ObtenerNombre @IDCLIENTE varchar(11) AS
SELECT NOMBRECOMPAA
FROM CLIENTES
WHERE IDCLIENTE = @IDCLIENTE

Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al
que se le pasa un parmetro, llamado @idcliente, de tipo varchar(11), que realiza una
consulta para obtener el nombre de la tabla clientes, cuyo cdigo coincida con el parmetro.
De esta forma, si queremos obtener el nombre del cliente cuyo cdigo sea 'anton', deberemos
ejecutar el procedimiento pasndole 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 parmetros 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.NOMBRECOMPAA,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
S
ISTEMAS
UNI
BETWEEN @FECHAINICIAL AND @FECHAFINAL

Ejecutando el procedimiento almacenado

EXEC LISTARPEDIDOS 'ANTON','12/05/95','22/12/96'

PARMETROS 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 parmetro de
salida, como resultado de la ejecucin del procedimiento?. La solucin para este caso es
utilizar la palabra reservada OUTPUT para los argumentos de salida.

Si por ejemplo, queremos obtener el nmero de clientes y el nmero de productos que
tenemos en la base de datos, crearemos el procedimiento almacenado que muestra el Cdigo
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. Bsicamente es similar al anterior. Detrs de la palabra
reservada PROCEDURE damos el nombre del procedimiento almacenado, y a continuacin
proporcionamos los parmetros, 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
continuacin. 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 continuacin devolvemos en el parmetro @clientes el valor obtenido, utilizando
@@ROWCOUNT.

Acto seguido se realiza lo mismo para la tabla Productos. Ntese como la forma de asignar
un valor a un atributo es mediante una sentencia SELECT, igualando el parmetro al valor.

La funcin @@ROWCOUNT devuelve el nmero de filas que se han seleccionado. Es
equivalente a la sentencia que aparece en el Cdigo fuente

SELECT COUNT(*) FROM Productos

Se podra sustituir por Cdigo fuente

CREATE PROCEDURE num_clientes_productos @clientes int OUTPUT, @clientes int
OUTPUT AS
SELECT @clientes = (SELECT COUNT(*) FROM clientes)
SQL SERVER Implementacion Pag.162
S
ISTEMAS
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 parmetros, 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 funcin 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 tambin la ejecucin 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 Cdigo
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
S
ISTEMAS
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 Cdigo 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
parmetro si no se pasa ningn valor en la llamada o si se especifica el valor predeterminado.

CREATE PROCEDURE LISTARCLIENTES(@PAIS VARCHAR(25) ='ARGENTINA')
AS
SELECT IDCLIENTE,NOMBRECOMPAA,DIRECCIN,PAS FROM CLIENTES
WHERE PAS=@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
S
ISTEMAS
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 extensin 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
S
ISTEMAS
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, despus, 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 slo hemos visto dos
ejemplos de aplicacin.

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,FECHACONTRATACIN,DIRECCION,
CIUDAD,PAS,FONO)

VALUES(@APELLIDOS,@NOMBRE,@CARGO,@FECHANACIMIENTO,@FECHACONTRATACION,@DIRECCION,@CIUDA
D,
@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
S
ISTEMAS
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 espcificando 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
S
ISTEMAS
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 transaccin es un conjunto de operaciones que van a ser tratadas como una nica
unidad.

La transaccin ms 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 transaccin autocommit, una transaccin autocompletada. Cuando enviamos
esta sentencia al SQL Server se escribe en el fichero de transacciones lo que va a ocurrir y a
continuacin realiza los cambios necesarios en la base de datos. Si hay algn tipo de
problema al hacer esta operacin 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 intervencin 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
explcita.

La sentencia que se utiliza para indicar el comienzo de una transaccin es BEGIN TRAN. Si
alguna de las operaciones de una transaccin falla hay que deshacer la transaccin 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 transaccin se completan con xito hay que marcar el fin de
una transaccin 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 transaccin 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 cdigo de error
BEGIN TRAN
--Iniciamos la transaccin
UPDATE Productos SET PrecioUnidad=2.5 WHERE NombreProducto =Queso de cabra
--Ejecutamos la primera sentencia
SET @Error=@@ERROR
--Si ocurre un error almacenamos su cdigo en @Error
--y saltamos al trozo de cdigo que deshara la transaccin. 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
S
ISTEMAS
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 transaccin en la base de datos
COMMIT TRAN
TratarError:
--Si ha ocurrido algn error llegamos hasta aqu
If @@Error<>0 THEN
BEGIN
PRINT Ha ecorrido un error. Abortamos la transaccin
--Se lo comunicamos al usuario y deshacemos la transaccin
--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 cdigo que deshace la transaccin.

Hay una interpretacin incorrecta en cuanto al funcionamiento de las transacciones que esta
bastante extendida. Mucha gente cree que si tenemos varias sentencias dentro de una
transaccin y una de ellas falla, la transaccin se aborta en su totalidad. Nada ms lejos de
la realidad! Si tenemos dos sentencias dentro de una transaccin.

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 ejecutarn como una sola. Si por ejemplo en medio de la transaccin
(despus del primer update y antes del segundo) hay un corte de electricidad, cuando el SQL
Server se recupere se encontrar en medio de una transaccin y, o bien la termina o bien la
deshace, pero no se quedar a medias.El error est en pensar que si la ejecucin de la
primera sentencia da un error se cancelar la transaccin. El SQL Server slo se preocupa
de ejecutar las sentencias, no de averiguar si lo hacen correctamente o si la lgica de la
transaccin es correcta. Eso es cosa nuestra. Por eso en el ejemplo que tenemos ms arriba
para cada sentencia de nuestro conjunto averiguamos si se ha producido un error y si es as
actuamos en consecuencia cancelando toda la operacin.

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
S
ISTEMAS
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
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.171
S
ISTEMAS
UNI
CREACION DE TRIGGERS

Los disparadores de procedimiento, ms comnmente 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 accin del tipo:

INSERCIN
BORRADO
ACTUALIZACIN

La sintaxis de la sentencia de creacin de triggers es la siguiente:

CREATE TRIGGER nombre ON tabla FOR accion AS codigo

Donde accin especifica el evento que debe ocurrir para que se dispare el trigger, y que
puede ser:

UPDATE: actualizacin.
INSERT: insercin.
DELETE: borrado.

Por ejemplo, si queremos crear un trigger llamado modificacin_cliente, sobre la tabla
Authors, que muestre un mensaje cada vez que se actualiza una fila de la tabla, deberemos
escribir el Cdigo 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 Cdigo fuente

UPDATE clientes SET nombre ='Antonio Moreno' WHERE idcliente ='anton'

Con esto conseguimos dos cosas, actualizar el nombre del cliente cuyo cdigo es el
especificado a Miguel, y obtener el mensaje que se muestra como ejecucin del trigger de
actualizacin.

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 dara lugar a un bucle
infinito

2. Por esta razn, un trigger no puede ejecutar instrucciones DDL (lenguaje de definicin
de datos)

3. No se pueden ejecutar sentencias como SELECT INTO o de creacin de dispositivos
dentro de un trigger



SQL SERVER Implementacion Pag.172
S
ISTEMAS
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 Cdigo
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 Cdigo
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 accin dentro de la base de
datos. As, si por ejemplo se ejecuta una insercin, una actualizacin, o un borrado de una
tabla, se ejecutaran las sentencias definidas para el trigger en concreto de esa tabla
especfica.

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 prcticamente 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 definicin de un trigger, podemos hacer referencia a un par de tablas lgicas,
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 aadidos o borrados.

SQL SERVER Implementacion Pag.173
S
ISTEMAS
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 cdigo:

SELECT * FROM DELETED

TIPOS DE DESENCADENADORES

SQL-Server permite la definicin de varios tipos de triggers, entre los cuales cabe destacar los
siguientes:
DESENCADENADORES MLTIPLES:
Para una misma tabla, se pueden definir distintos triggers para la misma accin, es
decir, si definimos un trigger para insert, y resulta que dicha tabla ya tena definido un
trigger para esa misma accin, se ejecutarn 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 ejecucin de otro trigger, y as sucesivamente. Si se supera el nivel de anidamiento
permitido, se cancelar la ejecucin 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 definicin de triggers:

Un trigger slo 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 accin del desencadenador puede utilizarse para definir ms de un trigger
sobre la misma tabla
La opcin SET elegida dentro de la ejecucin de un desencadenador, volver a su
estado previamente definido una vez concluya la ejecucin del mismo

As mismo, no se permite la utilizacin de las sentencias del DDL dentro de la
definicin de un trigger En una vista no se puede utilizar un desencadenador

RESOLUCIN DIFERIDA DE NOMBRES

La resolucin diferida de nombres es una utilidad que permite escribir triggers que hagan
referencia a tablas que no existen en el momento de la compilacin. Por ejemplo, el siguiente
cdigo 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
S
ISTEMAS
UNI
FROM CLIENTES A INNER JOIN X
ON A.IDCLIENTE = X.IDCLIENTE

EJEMPLOS

1. Veamos a continuacin algunos ejemplos que complementen lo visto hasta ahora. El
siguiente cdigo, muestra la forma de enviar un mensaje de correo electrnico a una persona,
cuando se aade 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 enve 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 cdigo.

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
S
ISTEMAS
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.IDCATEGORA FROM CATEGORAS C
WHERE C.NOMBRECATEGORA LIKE 'CONDIMENTO%')

SET @EXISTE=ISNULL(( SELECT IDPRODUCTO
FROM PRODUCTOS
WHERE
IDCATEGORA=@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
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.177
S
ISTEMAS
UNI

CURSORES EN SQL SERVER

Todas las instrucciones SQL operan sobre un conjunto de filas. Una instruccin SELECT
devuelve un conjunto completo de resultados que contiene todas las filas que cumplen los
requisitos incluidos en la instruccin SELECT.

Las aplicaciones necesitan procesar el conjunto de resultados de una fila o bloque de filas de
una vez. Los cursores son una extensin lgica 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 tambin admite extensiones como:
Una instruccin 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 instruccin
DECLARE CURSOR.
FORWARD_ONLY
Especifica que el cursor slo se puede desplazar desde la primera a la ltima fila. FETCH
NEXT es la nica opcin de recuperacin 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 opcin 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 reflejarn en los datos obtenidos en las recuperaciones
realizadas en el cursor y adems 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 travs 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 eliminacin de la fila antigua seguida de la insercin de la nueva. La fila con los
SQL SERVER Implementacion Pag.178
S
ISTEMAS
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 actualizacin se
realiza a travs del cursor, al especificar la clusula 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 recuperacin disponible
debido a que no se ha especificado la opcin 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 instruccin 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
S
ISTEMAS
UNI
Para avanzar o retroceder desde la posicion actual segn 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 instruccin 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 NOMBRECOMPAA='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, NOMBRECOMPAA, PAS FROM CLIENTES
OPEN CUR_CLIENTES

FETCH FIRST FROM CUR_CLIENTES

DECLARE @IDCLIENTE VARCHAR(15)
DECLARE @NOMBRECOMPAIA VARCHAR(30)
DECLARE @PAIS VARCHAR(30)

WHILE @@FETCH_STATUS=0
BEGIN
FETCH NEXT FROM CUR_CLIENTES INTO @IDCLIENTE,@NOMBRECOMPAIA, @PAIS
PRINT @IDCLIENTE + ' ' +@NOMBRECOMPAIA + + @PAIS
END

SQL SERVER Implementacion Pag.180
S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.181
S
ISTEMAS
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 dilogo Archivo nueva base de datos, haga clic en una ubicacin 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 Conexin del cuadro de dilogo vinculos de datos, especifique un nombre de
servidor y la informacin necesaria para iniciar una sesin en el servidor



SQL SERVER Implementacion Pag.182
S
ISTEMAS
UNI
5. A continuacin, seleccione la base de datos en el servidor.

















7. Para Finalizar Haga clic en Aceptar.

SQL SERVER Implementacion Pag.183
S
ISTEMAS
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
S
ISTEMAS
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
S
ISTEMAS
UNI S
ISTEMAS
UNI
SQL SERVER Implementacion Pag.186

SQL SERVER Implementacion Pag.186
S
ISTEMAS
UNI

SQL SERVER 2000 PRACTICA 1
1. Crear la tabla empleados y definir su clave principal en la misma instruccin de creacin.
______________________________________________________________________
2. Crear la tabla oficinas con su clave principal y su clave fornea ( la columna dir contiene
el cdigo de empleado del director de la oficina luego es un campo que hace referencia
a un empleado luego es clave fornea y hace referencia a la tabla empleados).
______________________________________________________________________
3. Crear la tabla productos con su clave principal.
______________________________________________________________________
4. Crear la tabla clientes tambin con todas sus claves y sin la columna limitecredito.
______________________________________________________________________
4. Crear la tabla pedidos sin clave principal, con la clave fornea 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 Aadir a la definicin de clientes la columna limitecredito.
______________________________________________________________________
6 Aadir a la tabla empleados las claves forneas 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 quin dirige al empleado, su jefe inmediato).
______________________________________________________________________
7 Hacer que no puedan haber dos empleados con el mismo nombre.
______________________________________________________________________
8 Aadir a la tabla de pedidos la definicin 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
S
ISTEMAS
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 nmero del tema y 1 el nmero 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, descripcin, precio y precio con I.G.V. incluido (es el precio anterior
aumentado en un 16%).
2. De cada pedido queremos saber su nmero de pedido, fab, producto, cantidad,
precio unitario e importe.
3. Listar de cada empleado su nombre, n de das que lleva trabajando en la empresa y
su ao de nacimiento (suponiendo que este ao ya ha cumplido aos).
4. Obtener la lista de los clientes agrupados por cdigo de representante asignado,
visualizar todas la columnas de la tabla.
5. Obtener las oficinas ordenadas por orden alfabtico de regin y dentro de cada
regin por ciudad, si hay ms de una oficina en la misma ciudad, aparecer primero
la que tenga el nmero de oficina mayor.
6. Obtener los pedidos ordenados por fecha de pedido.
7. Listar las cuatro lneas de pedido ms caras (las de mayor importe).
8. Obtener las mismas columnas que en el ejercicio 2 pero sacando unicamente las 5
lneas de pedido de menor precio unitario.
9. Listar toda la informacin de los pedidos de marzo.
9. Listar los nmeros de los empleados que tienen una oficina asignada.
10. Listar los nmeros 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 despus las del este).
12. Listar los empleados de nombre J ulia.
13. Listar los productos cuyo idproducto acabe en x.
SQL SERVER Implementacion Pag.188
S
ISTEMAS
UNI


SQL SERVER 2000 PRACTICA 3

Las consultas multitabla

1. Listar las oficinas del este indicando para cada una de ellas su nmero, ciudad, nmeros
y nombres de sus empleados. Hacer una versin en la que aparecen slo 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 nmero, importe, nombre del cliente, y el lmite de
crdito del cliente correspondiente (todos los pedidos tienen cliente y representante).
______________________________________________________________________
3. Listar los datos de cada uno de los empleados, la ciudad y regin 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 da 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 nmero, nombre y cuota de su jefe.
______________________________________________________________________
13. Listar los cdigos de los empleados que tienen una lnea de pedido superior a 10.000 ptas
o que tengan una cuota inferior a 10.000 pts.
______________________________________________________________________
SQL SERVER Implementacion Pag.189
S
ISTEMAS
UNI

SQL SERVER 2000 PRACTICA 4

EJERCICIOS DE SUBCONSULTAS
Los ejercicios que te proponemos a continuacin se pueden resolver de varias maneras,
intenta resolverlos utilizando subconsultas ya que de eso trata el tema, adems 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 J aumes
(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 descripcin) para los cuales no se ha recibido
ningn pedido de 25000 o ms.
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
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 ms 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
S
ISTEMAS
UNI

SQL SERVER 2000 PRACTICA 5

CONSULTAS DE RESUMEN

1. Cul 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. Cul 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 cuntos pedidos hay de ms de 25000 ptas.
______________________________________________________________________
7. Listar cuntos empleados estn asignados a cada oficina, indicar el nmero de oficina y
cuntos hay asignados.
______________________________________________________________________
8. Para cada empleado, obtener su nmero, nombre, e importe vendido por ese empleado
a cada cliente indicando el nmero de cliente.
______________________________________________________________________
9. Para cada empleado cuyos pedidos suman ms de 30.000 ptas, hallar su importe medio
de pedidos. En el resultado indicar el nmero de empleado y su importe medio de
pedidos.
______________________________________________________________________

SQL SERVER Implementacion Pag.191
S
ISTEMAS
UNI

10. Listar de cada producto, su descripcin, precio y cantidad total pedida, incluyendo slo
los productos cuya cantidad total pedida sea superior al 75% del stock; y ordenado por
cantidad total pedida.
______________________________________________________________________
11. Saber cuntas oficinas tienen empleados con ventas superiores a su cuota, no queremos
saber cuales sino cuntas hay.
12. Subir un 5% el precio de todos los productos del fabricante ACI.
______________________________________________________________________
13. Aadir una nueva oficina para la ciudad de Madrid, con el nmero de oficina 30,
con un objetivo de 100000 y regin 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

Potrebbero piacerti anche