manual sql server

122

Upload: david-benavides-rivera

Post on 25-Jul-2015

1.634 views

Category:

Documents


7 download

DESCRIPTION

base importante

TRANSCRIPT

Page 1: Manual SQL Server
Page 2: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.2

Microsoft

SQL Server 2005 Express Edición

Page 3: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.3

Presentacion Microsoft SQL Server 2005 Express Edición (SQL Server Express) es una plataforma de base de datos que se basa en Microsoft SQL Server 2005. Es también la sustitución de Microsoft Desktop Engine (MSDE). Gracias a su integración con Microsoft Visual Studio 2005, SQL Server Express facilita el desarrollo de aplicaciones controladas por datos con gran variedad de funciones, que mejoran la seguridad del almacenamiento y se implementan con rapidez. SQL Server Express se descarga gratuitamente y se puede redistribuir previo acuerdo entre las partes. Cada edición puede servir como base de datos cliente y como base de datos básica de servidor. Ambas ediciones de SQL Server Express constituyen una opción idónea para fabricantes independientes de software (ISV), usuarios de servidor, programadores no profesionales, programadores Web, alojamientos de sitios Web y aficionados a crear aplicaciones cliente. Si necesita características de base de datos más avanzadas, puede actualizar SQL Server Express a versiones más sofisticadas de SQL Server Microsoft SQL Server 2005 Express Edición (SQL Server Express) se basa en Microsoft SQL Server 2005 y admite la mayoría de las características del Database Engine (Motor de base de datos) de ese producto y de las versiones anteriores de Microsoft SQL Server. Si crea y diseña una base de datos en SQL Server Express, puede migrarla a SQL Server 2005. Sin embargo, no podrá utilizar la base de datos de SQL Server Express con versiones anteriores de SQL Server, como SQL Server 2000.

MCTS. Henry Chavez Viera Docente de sistemas UNI

Page 4: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.4

Las 10 Características más importantes sobre SQL Server 2005 Express Edition • Soporte integrado para el common language runtime (CLR). Los procesos y

funciones almacenados pueden ser escritos utilizando tu lenguaje de programación favorito.

• Soporte XML nativo.

• Soporte de XCopy para mover Bases de Datos de un sitio a otro.

• Instalación robusta y fiable utilizando tanto el interfaz gráfico de usuario

(graphical user interface - GUI) como el modo silencioso. • Servicio y parcheado automatizado.

• Profunda integración con Visual Studio para proporcionar acceso a ricos

controles de datos como DataGridView, DataNavigator, y DataConnector. • Soporte para Bases de Datos de hasta 4GB.

• Soporte para sistemas desconectados con SQL Server Service Broker and

Replication. • SQL Server Express Manager, una nueva y sencilla de usar herramienta

de gestión de bases de datos y análisis de queries. • Implantación más sencilla mediante Visual Studio ClickOnce.

En la siguiente lista se destacan los componentes principales de SQL Server 2005 que no son compatibles con SQL Server Express: • Reporting Services • Notification Services • Integration Services • Analysis Services • Búsqueda de texto • Servicios OLAP y minería de datos

Requisitos de instalacion En la tabla siguiente se muestran los requisitos previos de software y los requisitos mínimos de hardware y software para ejecutar Microsoft SQL Server 2005 Express Edition (SQL Server Express). Para determinar si su equipo cumple los requisitos del sistema, en el menú Inicio, haga clic con el botón secundario en Mi PC y, a continuación, haga clic en Propiedades. En la ficha General se muestra el tipo de CPU y la velocidad, así como la cantidad de memoria instalada (RAM).

Requisitos previos de software

Microsoft .NET Framework 2.0 SP1 de Microsoft Internet Explorer 6.0 o posterior

Page 5: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.5

(requisito previo para .NET Framework)

RAM Mínimo: 192 MB Recomendado: 512 MB o más

Espacio en el disco duro 600 MB de espacio libre

Procesador Compatible con Pentium III o superior Mínimo: 500 MHz Recomendado: 1 GHz o más

Sistema operativo

Windows Server 2003 SP1 Windows Server 2003 Enterprise Edition SP1 Windows Server 2003 Datacenter Edition SP1 Windows Small Business Server 2003 Standard Edition SP1 Windows Small Business Server 2003 Premium Edition SP1 Windows XP Professional SP2 Windows XP Home Edition SP2 Windows XP Tablet Edition SP2 Windows XP Media Edition SP2 Windows 2000 Professional Edition SP4 Windows 2000 Server Edition SP4 Windows 2000 Advanced Edition SP4 Windows 2000 Datacenter Server Edition SP4

Page 6: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.6

S SESION 1 • ¿Qué es el SQL Server? • Herramientas del sistema del SQL Server 2005 EE. • Roles y responsabilidades del implementado de base de datos. • Bases de datos. Componentes lógicos: registro de datos y registro de transacciones. Componentes físicos: archivos y grupos de archivos de bases de datos.

• Catálogos del sistema.

Page 7: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.7

Herramientas del sistema del SQL Server 2005 EE Configuración de SQL Server 2005.

Una vez instalado la versión Express de SQL Server 2005 veamos que ha quedado instalado en nuestro pc, para ello acudimos al menú de inicio, todos los programas y localizamos el paquete añadido por nuestra instalación:

Vemos que dentro del paquete Microsoft SQL Server 2005, accedemos a un menú con unas herramientas de configuración, estas herramientas son:

De estas herramientas, para nuestros intereses nos basta con conocer la primera de todas (SQL Server Configuration Manager). Desde ella podremos configurar el acceso y el modo de arranque de nuestro servidor de datos. Arrancamos la aplicación y nos encontramos la siguiente pantalla:

Page 8: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.8

De todas las posibles herramientas de configuración a las que podemos optar nosotros tenemos que destacar la primera de todas, SQL Server 2005 Services, desde la cual podremos configurar dos de los aspectos más importantes de nuestro servidor. Por lo tanto hacemos doble click en el icono correspondiente y accedemos a los servidores de bases de datos instalados en nuestro pc. Teniendo que configurar el primero de todos:

Haciendo click con el botón derecho accedemos al menú desde el cual vemos que tenemos habilitadas una serie de opciones. El primer bloque de opciones hace referencia al estado de nuestro servidor, la opción propiedades para configuración y la última una pequeña ayuda que nos ofrecen en la instalación. De nuevo, podemos comparar el servicio de base de datos de SQL Server 2005, con el servicio de páginas Web de IIS, como ya conoces, desde la configuración de IIS tenemos la opción de configurar una serie de propiedades, y establecer el estado del servidor de páginas web. De igual manera desde SQL Server Configuration Manager, podemos realizar estas mismas tareas sobre los servicios de base de datos.

Opción: Función:

start

Para activar nuestro servidor de modo manual . Si el servidor se encuentra en funcionamiento,

lógicamente esta función aparecerá deshabilitada, lo mismo sucederá con el resto de opciones.

Page 9: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.9

stop Detiene el servidor.

pause Detiene el servidor momentáneamente.

resume Una vez detenido el servidor mediante "pause", lo vuelve a

poner en marcha.

restart Detiene el servidor, e inmediatamente vuelve a activarlo.

propiedades Accedemos a una ventana para

llevar a cabo varias configuraciones.

ayuda Pequeña ayuda sobre este servicio.

Veamos ahora como configurar ciertos aspectos del servidor desde la ventana de configuración que aparece pulsando sobre propiedades:

La ventana aparece con la pestaña Iniciar sesion, activada, desde esta ventana configuramos los permisos de acceso al servidor. Es muy importante configurar debidamente estos accesos.

Page 10: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.10

Primero podemos indicar el modo de la cuenta, o bien indicar que la cuenta será la activada en nuestro servidor. En nuestro caso lo configuraremos para que el administrador de nuestro pc sea el usuario predeterminado para tener permisos de administración. Cuando instalamos nuestros servicios en el servidor de una empresa debemos operar de diferente método, creando un usuario específico para la administración de la base de datos, es bastante lógico crear un usuario para esta tarea, ya que es posible que modifiquemos las características de usuarios para otras tareas y para que estos cambios no afecten a SQL Server es mejor que tenga un único usuario fijo para esta tarea. Y por último tenemos a nuestra disposición una serie de botones para actuar sobre el estado del servidor. Sigamos con la configuración pinchando en la pestaña Service.

Destacamos la propiedad Modo de inicio, desde ella podemos habilitar 3 modos diferentes de activar nuestro servidor:

Opción: Función:

Automatico

Con esta opción, el servidor arrancará conjuntamente con el sistema, es decir, cuando nuestro sistema operativo arranque, el servidor de base de datos se activará automáticamente, esta es la opción más habitual y recomendad, ya que

Page 11: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.11

nuestro servidor estará permanentemente ofreciendo sus servcios.

Deshabilitado Deshabilitamos el arranque del servidor.

Manual El modo de gestionar el estado del servidor será manual por parte del desarrollador mediante las opciones que vimos anteriormente.

No entraremos a explicar las opciones avanzadas ya que no entraría dentro de los objetivos de este curso. En el siguiente video se explica detenidamente como dejar configurado nuestro servidor, presta atención a todos los aspectos explicados.

Herramienta de administración y gestión de SQL Serv er 2005

Con la instalación y la configuración que acabamos de ver ya podríamos comenzar a trabajar con las bases de datos. Para crear y gestionar nuestras tablas, procedimientos almacenados, etc nos veríamos obligados a hacerlo desde Visual Studio. Pero, como ya sabes, el objetivo final del curso es el desarrollo de una aplicación profesional, para la cual nuestra base de datos estará integrada de una gran cantidad de tablas y procedimientos almacenados. Por este motivo, nos ayudaremos de una segunda herramienta que nos permita administrar nuestra base de datos, realizar comprobaciones, y otro tipo de tareas. Esta segunda herramienta es Sql Server Management Studio Express , la cual no se instala con la herramientas de configuración y debemos descargarla por separado desde la página de Microsoft. Por si nunca la has descargado o instalado te dejo el enlace para descargarla, basta con descargar y seguir el asistente de instalación, es el mismo enlace que has encontrado en el anterior capitulo. Una vez instalada esta herramienta, vemos que ha sido añadida a nuestro paquete de software de SQL Server 2005:

Con SQL Server Management Studio hemos instalado un conjunto de herramientas para realizar todas las tareas necesarias.

Nota: Si has desarrollado bases de datos con SQL Server 2000 , debes saber que con SQL Server Management Studio se instalan todas las herramientas en una sóla, y no en paquetes separados.

Vamos a ir viendo paso a paso, como trabajar con esta herramienta. De modo que al finalizar este capítulo, tengamos creada una base de datos y seas capaz más adelante de crear tus propias bases de datos, con sus tablas bien estructuradas,

Page 12: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.12

etc... Por lo tanto combinaremos explicaciones sobre SQL Server Mangement Studio con otros aspectos importantes del diseño de base de datos. Comencemos con la herramienta, desde el menú de inicio arrancamos la aplicación y nos encontramos con una ventana de conexión.

Desde esta ventana, te debe recordar a lo explicado en las herramientas de configuración. Antes de comenzar a trabajar con el administrador, debemos indicar a que servidor y con que usuario queremos conectar y entrar al administrador.

Propiedad: Opciones: Función:

Nombre del servidor:

Elegimos el servidor con el que conectaremos.

El nombre del servidor, que elijamos para conectar con el administrador. Debes recordar este nombre, porque será el que tengas que utilizar en las cadenas de conexión desde .NET.

Autenticacion:

• Autenticacion Windows • Autenticacion SQL

Server

Si elegimos la opción " Autenticacion Windows" estaremos conectando con la misma cuenta de usuario con la que iniciamos nuestro sistema. Trabajaremos con esta opción a lo largo del curso. Si seleccionamos " Autenticacion SQL Server" deberemos indicar con que cuenta vamos a conectar e introducir la

Page 13: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.13

contraseña específica para conectar con SQL Server. Con la versión SQL Server 2005 Express es más recomendable trabjar con "Windows Authentication" ya que de otro modo podemos encontrar problemas por la limitación de la versión gratuita.

Elegidas nuestras opciones adecuadas pulsaremos en conectar, en ese momento nos muestra una ventana con el proceso de conexión y si todo ha resultado correcto, arranca nuestra herramienta de administración.

Nota: En este curso utilizaremos esta herramienta para diseñar bases de datos, crear cuentas de usuario y ejecutar nuestras sentencias SQL, necesarias para la gestión de datos, mediante el administrador de consultas. Todo lo demás quedaría para un curso específico de administración y mantenimiento de bases de datos con SQL Server 2005. Por lo tanto no te preocupes al observar que no se explican todas las características, ya que las tareas que vamos a aprender, son las necesarias para desarrollar nuestras aplicaciones.

Bases de datos de SQL Server Componentes lógicos: registro de datos y registro de transacciones.

Page 14: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.14

SQL Server 2005 asigna una base de datos a un conjunto de archivos del sistema operativo. Los datos y la información del registro nunca se mezclan en el mismo archivo, y cada archivo sólo es utilizado por una base de datos.

Los grupos de archivos se denominan colecciones con nombre de archivos que se utilizan como ayuda en tareas de colocación de datos y administrativas, como las operaciones de copia de seguridad y restauración.

Las bases de datos de SQL Server 2005 utilizan tres tipos de archivos:

• Archivos de datos principales El archivo de datos principal es el punto de partida de la base de datos y apunta a los otros archivos de la base de datos. Cada base de datos tiene un archivo de datos principal. La extensión recomendada para los nombres de archivos de datos principales es .mdf.

• Archivos de datos secundarios Los archivos de datos secundarios son todos los archivos de datos menos el archivo de datos principal. Puede que algunas bases de datos no tengan archivos de datos secundarios, mientras que otras pueden tener varios archivos de datos secundarios. La extensión de nombre de archivo recomendada para los archivos de datos secundarios es .ndf.

• Archivos de registro Los archivos de registro almacenan toda la información de registro que se utiliza para recuperar la base de datos. Como mínimo, tiene que haber un archivo de registro por cada base de datos, aunque puede haber varios. La extensión de nombre de archivo recomendada para los archivos de registro es .ldf.

En SQL Server 2005 , las ubicaciones de todos los archivos de una base de datos se graban tanto en el archivo principal de la base de datos como en la base de datos master . SQL Server Database Engine (Motor de base de datos de SQL Server) utiliza casi siempre la información de ubicación del archivo de la base de datos master. Sin embargo, Database Engine (Motor de base de datos) utiliza la información de ubicación del archivo principal para inicializar las entradas de ubicación de archivos de la base de datos master en las siguientes situaciones:

• Al adjuntar una base de datos mediante la instrucción CREATE DATABASE con la opción FOR ATTACH

• Al actualizar de SQL Server versión 2000 o versión 7.0 a SQL Server 2005. • Al restaurar la base de datos master. •

Los archivos de SQL Server 2005 tienen dos nombres:

logical_file_name

logical_file_name es el nombre que se utiliza para hacer referencia al archivo en todas las instrucciones Transact-SQL. El nombre de archivo lógico tiene que cumplir las reglas de los identificadores de SQL Server y tiene que ser único entre los nombres de archivos lógicos de la base de datos.

os_file_name

os_file_name es el nombre del archivo físico que incluye la ruta de acceso al directorio. Debe seguir las reglas para nombres de archivos del sistema operativo.

La siguiente ilustración muestra ejemplos de los nombres de archivo lógico y físico de una base de datos creada en una instancia predeterminada de SQL Server 2005:

Page 15: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.15

Los archivos de datos y de registro de SQL Server se pueden colocar en sistemas de archivos FAT o NTFS. Se recomienda utilizar el sistema de archivos NTFS por las características de seguridad que ofrece. No se pueden colocar grupos de archivos de datos de lectura y escritura, y archivos de registro, en un sistema de archivos NTFS comprimido. Sólo las bases de datos de sólo lectura y los grupos de archivos secundarios de sólo lectura se pueden colocar en un sistema de archivos NTFS comprimido. Para obtener más información, vea Grupos de archivos de sólo lectura y compresión.

Cuando se ejecutan varias instancias de SQL Server en un único equipo, cada instancia recibe un directorio predeterminado diferente para albergar los archivos de las bases de datos creadas en la instancia.

Páginas de archivo de datos Las páginas de un archivo de SQL Server 2005 están numeradas secuencialmente, comenzando por 0 para la primera página del archivo. Cada archivo de una base de datos tiene un número de identificador único. Para identificar de forma única una página de una base de datos, se requiere el identificador del archivo y el número de la página. El siguiente ejemplo muestra los números de página de una base de datos que tiene un archivo de datos principal de 4 MB y un archivo de datos secundario de 1 MB.

Page 16: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.16

La primera página de cada archivo es una página de encabezado de archivo que contiene información acerca de los atributos del archivo. Algunas de las otras páginas del comienzo del archivo también contienen información de sistema, como mapas de asignación. Una de las páginas de sistema almacenadas en el archivo de datos principal y en el archivo de registro principal es una página de inicio de la base de datos que contiene información acerca de los atributos de la base de datos. Para obtener más información acerca de las páginas y los tipos de páginas, vea Páginas y extensiones.

Tamaño de archivo Los archivos de SQL Server 2005 pueden crecer automáticamente a partir del tamaño originalmente especificado. Cuando se define un archivo, se puede especificar un incremento de crecimiento. Cada vez que se llena el archivo, el tamaño aumenta en la cantidad especificada. Si hay varios archivos en un grupo de archivos, no crecerán automáticamente hasta que todos los archivos estén llenos. A continuación, el crecimiento tiene lugar por turnos.

Cada archivo también puede tener un tamaño máximo especificado. Si no se especifica un tamaño máximo, el archivo puede crecer hasta utilizar todo el espacio disponible en el disco. Esta característica es especialmente útil cuando SQL Server se utiliza como una base de datos incrustada en una aplicación para la que el usuario no dispone fácilmente de acceso a un administrador del sistema. El usuario puede dejar que los archivos crezcan automáticamente cuando sea necesario y evitar así las tareas administrativas de supervisar la cantidad de espacio libre en la base de datos y asignar más espacio manualmente.

Catálogos del sistema Las aplicaciones dinámicas que no están codificadas de forma rígida para funcionar con un conjunto específico de tablas y vistas deben disponer de un mecanismo para determinar la estructura y los atributos de los objetos de cualquier base de datos a la que se conectan. Las aplicaciones pueden necesitar información como la siguiente:

• El número y nombre de las tablas y vistas de una base de datos. • El número de columnas de una tabla o vista, junto con el nombre, el tipo de datos, la

escala y la precisión de cada columna. • Las restricciones definidas en una tabla. • Los índices y las claves definidos para una tabla.

El catálogo del sistema de SQL Server 2005 proporciona esta información para las bases de datos de SQL Server . El núcleo de los catálogos del sistema de SQL Server 2005 es un conjunto de vistas que muestran metadatos que describen los objetos de una instancia de SQL Server. Los metadatos son datos que describen los atributos de los objetos de un sistema

Page 17: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.17

S SESION 2

• Generación de scripts en SQL Transact. • Lenguaje SQL Transact DML para la manipulación de los datos. • Inserción de filas - sentencia INSERT. • Actualización de filas - sentencia UPDATE.

• Eliminación de filas - sentencia DELETE

Page 18: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.18

GENERACIÓN DE SCRIPTS EN SQL TRANSACT Transact-SQL es fundamental para trabajar con SQL Server . Todas las aplicaciones que se comunican con SQL Server lo hacen enviando instrucciones Transact-SQL al servidor, independientemente de la interfaz de usuario de la aplicación

En esta lección se muestra cómo crear una base de datos, crear una tabla en la base de datos y, a continuación, tener acceso a los datos de la tabla y cambiarlos. Puesto que esta lección es una introducción al uso de Transact-SQL, no usa ni describe las múltiples opciones disponibles para estas instrucciones.

Las instrucciones de Transact-SQL se pueden escribir y enviar a Database Engine (Motor de base de datos) de las siguientes maneras:

• Mediante el uso de SQL Server Management Studio . En este tutorial se supone que se usa Management Studio, pero también puede usarse Management Studio Express , disponible como descarga gratuita en el Centro de descargas de Microsoft.

MICROSOFT SQL SERVER MANAGEMENT STUDIO EXPRESS Microsoft SQL Server Management Studio Express (SSMSE) es una herramienta gráfica de administración gratuita y fácil de usar para SQL Server 2005 Express Edition y SQL Server 2005 Express Edition with Advanced Services. ABRIR SQL SERVER MANAGEMENT STUDIO Para abrir SQL Server Management Studio

1. En el menú Inicio , seleccione Todos los programas, Microsoft SQL Server 2005 y, a continuación, haga clic en SQL Server Management Studio .

2. En el cuadro de diálogo Conectar al servidor, compruebe la configuración predeterminada y, a continuación, haga clic en Conectar. Para conectarse, el cuadro Nombre del servidor debe contener el nombre del equipo en el que está instalado SQL Server. Si Database Engine (Motor de base de datos) es una instancia con nombre, el cuadro de nombre de servidor también debe contener el nombre de la instancia con el formato<nombreDeEquipo>\<nombreDeInstancia>

Page 19: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.19

2- Con el botón derecho (o el botón secundario), pulsa en Bases de datos y del menú selecciona Nueva base de datos, tal como te muestro en la figura 2.

Figura 2. Crear una nueva base de datos

3- Eso hará que te muestre una ventana como la de la figura 3. A la base de datos, le vas a dar el nombre PruebasGuille, así que escribe ese nombre en la caja de textos correspondiente y después pulsa en el botón Aceptar.

Figura 3. Cuadro de diálogo de Nueva base de datos

Page 20: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.20

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

1. 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 ) ------------------------------------------------------------------------------

2. Seleccione todas las instrucciones y pulse F5 ABRIR SU BASE DE DATOS

1. Escribe el comando siguiente :

USE VENTAS

2. Seleccione el comando y pulse F5

Page 21: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.21

MODIFICAR UNA BASE DE DATOS CREADA

COMANDO ALTER DATABASE

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

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

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

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

Page 22: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.22

AÑADIR ARCHIVOS LOG A LA BASE DE DATOS

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

ELIMINAR FICHEROS DE LA BASE DE DATOS

USE MASTER GO ALTER DATABASE DBEMPRESA REMOVE FILE Emp_dat4 GO

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

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'

Page 23: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.23

CREACIÓN DE TABLAS Para crear una tabla en su base de datos utilice el comando CREATE TABLE COMANDO CREATE TABLE CREATE TABLE Empleados (Nombre VARCHAR (25), Apellidos VARCHAR (50))

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

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

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

Tabla Empleados

Nombre Apellidos FechaNacimiento

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

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)

Page 24: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.24

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

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

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

GENERAR UN VALOR PREDETERMINADO PARA UN CAMPO

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

GENERAR UNA REGLA PARA UN CAMPO DE UNA TABLA

CREATE TABLE MATRICULAS (IDMATRICULA INT NOT NULL PRIMARY KEY , FECHAMATRICULA DATETIME NOT NULL, PAGO MONEY CHECK (PAGO>100)) UTILIZAR EL TIPO DE DATOS UNIQUEIDENTIFIER EN

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

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

Page 25: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.25

CREAR GENERAR UNA TABLA CON UN CAMPO AUTONUMERICO • El valor IDENTITY define que el campo Idalumno es autonumerico y empieza en el

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

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

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

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

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

GENERAR UN VALOR PREDETERMINADO PARA UN CAMPO

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

GENERAR UNA REGLA PARA UN CAMPO DE UNA TABLA

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

Page 26: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.26

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

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

CREAR UNA TABLA CON UNA CLAVE PRIMARIA COMPUESTA

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

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

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

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

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

Page 27: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.27

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

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

Este ejemplo asume que las tablas

CATEGORIAS Y PROVEEDORES ya existen ----------------------------------------------------------------------------------------------------------

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

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

Page 28: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.28

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,FECHAPE DIDO, 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,UNIDADESENEXISTENCI A INT, UNIDADESENPEDIDO INT,NIVELNUEVOPEDIDO TINYNT,SUSPENDIDO BIT)

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

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

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

DROP TABLE MATRICULAS /* Elimina La Tabla Matriculas */ MODIFICAR TABLAS DE LA BASE DE DATOS

Page 29: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.29

Entendemos por modificar una tabla, cambiar su estructura, es decir, añadir atributos, borrarlos, o cambiar la definición. La sentencia que permite modificar una tabla es la que muestra LA SENTENCIA ALTER TABLE Su sintaxis es la descrita en el Código fuente ALTER TABLE tabla ADD atrib tipo NULL Ejemplos Añadir una nueva columna a una tabla

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

Eliminar una columna de una tabla

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

ALTER TABLE CONTACTOS ADD EDAD TINYINT NULL CONSTRAINT ED_unique UNIQUE

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

Añadir varias columnas con restricciones

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

Añadir una columna con valor por defecto y NULL

Page 30: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.30

ALTER TABLE VIDEOS ADD FECHAESTRENO smalldatetime NULL CONSTRAINT FECHA_C1 DEFAULT getdate() WITH VALUES

Deshabilitar y habilitar una restricción

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

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

Page 31: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.31

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

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

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

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

Este ejemplo asume que las tablas CATEGORIAS Y PROVEEDORES ya existen

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

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

tablas CLIENTES y EMPLEADOS que ya existen

Page 32: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.32

CREATE TABLE PEDIDOS (IDPEDIDO INT IDENTITY NOT NULL PRIMARY KEY,FECHAPE DIDO, 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,UNIDADESENEXISTENCI A INT, UNIDADESENPEDIDO INT,NIVELNUEVOPEDIDO TINYNT,SUSPENDIDO BIT)

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

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

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

DROP TABLE MATRICULAS /* Elimina La Tabla Matriculas */

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

LA SENTENCIA ALTER TABLE

Page 33: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.33

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

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

ELIMINAR UNA COLUMNA DE UNA TABLA

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

ALTER TABLE CONTACTOS ADD EDAD TINYINT NULL CONSTRAINT ED_unique UNIQUE

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

AÑADIR VARIAS COLUMNAS CON RESTRICCIONES

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

Añadir una columna con valor por defecto y NULL

ALTER TABLE VIDEOS ADD FECHAESTRENO smalldatetime NULL CONSTRAINT FECHA_C1 DEFAULT getdate() WITH VALUES

Deshabilitar y habilitar una restricción

Page 34: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.34

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

Page 35: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.35

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

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

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

Si desea hacer una selección de los registros de la tabla Empleados utilizando uno de sus indices creados en el ejemplo anterior haga lo siguiente: SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS (INDEX=2) SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS(I NDEX=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

Page 36: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.36

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

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

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

Page 37: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.37

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

SELECT * FROM Productos WHERE idcategoria = 2

LA SENTENCIA DELETE El objeto de la sentencia DELETE es el de borrar filas de una tabla. Para poder borrar filas en una tabla se deben cumplir las condiciones de seguridad determinadas por el administrador y deben de cumplirse también las reglas de integridad referencial. La sintaxis es la siguiente: DELETE FROM tabla WHERE condición Donde tabla especifica la tabla sobre la cual queremos borrar las filas, y condición especifica la condición que se debe cumplir para que se borren las filas. Si omitimos la

Page 38: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.38

condición, se borrarán todas las filas de la tabla, es decir, la sentencia que aparece en el Código fuente borra todas las filas de la tabla Pedidos DELETE FROM PEDIDOS Por ejemplo, si queremos borrar una fila que hemos creado en la tabla Pedidos, deberemos ejecutar el Código fuente obteniendo el siguiente resultado: (1 row(s) affected) DELETE FROM PEDIDOS WHERE IDPEDIDO = 11077

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

Page 39: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.39

S

SESION 3 • Comprensión de la recuperación de datos. • La sentencia SELECT. Filtro de columnas y filas por medio de la sentencia

SELECT. • Operadores de comparación (relacionales y LIKE), operador de rango

(BETWEEN), operador de conjunto (IN). • Ordenamiento del conjunto de resultados con ORDER BY. • Uso de funciones Transact-SQL: funciones de conversión de tipo

(CONVERT y CAST), funciones de fecha y hora. • Uso de las funciones de agregación. • Agrupación de datos: GROUP BY y HAVING.

Page 40: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.40

RECUPERACION DE DATOS

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

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

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

CREATE TABLE Proveedores(IdProveedor int NOT NULL IDENTITY PRIMARY KEY,NombreCompañía varchar(40),Dirección varchar(60),Ciudad varchar(15),Teléfono varchar(24)

CREATE TABLE Productos(IdProducto int not null identity primary key,NombreProducto varchar(35), idproveedor REFERENCES Proveedores(idProveedor)

Page 41: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.41

ON UPDATE CASCADE ON DELETE CASCADE , idCategoria REFERENCES Categorias(idcategoria) ON UPDATE CASCADE ON DELETE CASCADE

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

Page 42: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.42

ON DELETE CASCADE ,PRECIOUNIDAD MONEY,CANTIDAD INT PRIMARY KEY(IDPEDIDO,IDPRODUCTO))

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

seleccionar los campos que deseamos recuperar de la base de datos, separados por comas. Si se especifica el símbolo *, se obtendrán todos los campos de la tabla.

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

datos. Si se especifica más de una tabla, éstas irán separadas por comas. • WHERE <condición>: permite establecer una condición de recuperación de las

filas de la/s tabla/s. Sólo se obtendrán aquellas Registros que verifiquen dicha condición, que será opcional.

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

Page 43: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.43

• GROUP BY <atributos>: permite establecer una selección de campos cuando

se utilizan funciones escalares o de conteo (ya se verá más adelante lo que significa.

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

como resultado de la aplicación de funciones escalares. • ORDER BY <atributos>: permite obtener el resultado de la consulta ordenado

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

Page 44: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.44

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

Page 45: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.45

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’ A ND ‘25/12/97’

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

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

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

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

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

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

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

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

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

SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS ORDER BY NOMBREPRODUCTO

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

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

13. Mostrar los 3 productos mas Caros

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

14. Mostrar los 3 productos mas Baratos

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

Page 46: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.46

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

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

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

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

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

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

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

Page 47: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.47

S

SESION 4

• Combinaciones: INNER JOIN, OUTER JOIN, CROSS JOIN, autojoin. • Creación de tablas a partir de consultas. • Reunión de consultas con UNION. • Uso de EXISTS y NOT EXISTS. • Uso de los store procedures para programar procesos en el servidor.

Manejo de las funciones más importantes del SQL Transact. • Introducción a los Trigger.

Page 48: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.48

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

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

• la unión de tablas

• la composición de tablas

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

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

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

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

El operador que permite realizar esta operación es el operador UNION.

Page 49: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.49

LA COMPOSICIÓN DE TABLAS

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

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

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

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

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

Los tipos de composición de tablas son:

El INNER JOIN El LEFT / RIGHT JOIN

SELECT *

FROM PEDIDOS,CLIENTES

WHERE PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE

Page 50: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.50

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

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

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

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

La sintaxis es la siguiente:

Ejem:

SELECT *

FROM PEDIDOS

INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE = CLIENTES .IDCLIENTE

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

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

col1, col2 son las columnas de emparejamiento.

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

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

COMP representa cualquier operador de comparación ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condición de emparejamiento.

Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condición entre paréntesis. Ejemplo: SELECT * FROM PROVEEDORES INNER JOIN PRODUCTOS ON PRODUCTOS

Page 51: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.51

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

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

SELECT * FROM CLIENTES INNER JOIN (PEDIDOS INNER JOIN EMPLEA DOS ON PEDIDOS.IDEMPLEADO = EMPLEADOS.IDEMPLEADO) ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE

En este caso hemos sustituido tabla2 por un INNER JOIN completo.

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

Oficinas Empleados

Clientes Productos

Clientes

Page 52: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.52

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

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

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

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

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

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

SI UTILIZAMOS EL INNER JOIN SELECT EMPLEADOS.*, CIUDAD FROM EMPLEADOS INNER JOIN OFICINAS ON EMPLEADOS.OFI CINA = OFICINAS.OFICINA

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

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

La sintaxis del LEFT JOIN es la siguiente:

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

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

Ejemplo:

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

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

La sintaxis del RIGHT JOIN es la siguiente:

Page 53: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.53

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

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

Ejemplo:

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

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

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

Por ejemplo podemos tener:

SELECT * FROM CLIENTES INNER JOIN (EMPLEADOS LEFT JOIN OFICI NAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA) ON CLIENTES.R EPCLIE = EMPLEADOS.NUMCLIE

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

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

Page 54: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.54

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,CAT EGORIAS.NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAÑIA,ST OCK FROM PRODUCTOS,CATEGORÍAS,PROVEEDORES WHERE PRODUCTOS.IDCATEGORIA=CATEGORIAS.IDCATEGORIA AND PRODUCTOS.IDPROVEEDOR=PROVEEDORES.IDPROVEEDOR

CON INNER JOIN SELECT PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CAT EGORIAS.NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAÑIA,ST OCK 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.NOMBR ECOMPAÑIA,EMPLEADOS.APELLIDOS+ ‘ ‘ + EMPLEADOS.NOMBRE,PEDIDOS.CARGO FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.I DCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO

Page 55: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.55

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 [TIEM PO SERVICIO] FROM EMPLEADOS 1. Mostrar los dias Transcurridos entre la fecha de Pedido y la Fecha de entrega de

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

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

SELECT IDPRODUCTO, NOMBREPRODUCTO, PRECIOUNIDAD, PRECIOUNIDAD*.010 AS INCREMENTO, PRECIOUNIDAD+(PRECIOUNIDAD)*.010 AS [PRECIO INCREME NTADO] 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.IDPRO DUCTO

Page 56: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.56

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

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

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

Page 57: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.57

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

FUNCION AVG Realiza una media aritmética de los atributos para todas las filas accedidas mediante la consulta SQL. Si por ejemplo tenemos una tabla de materiales, con los atributos cod_material, descripción, precio y cantidad _ pedida, y queremos saber la cantidad media pedida de todos los materiales, deberemos realizar una media aritmética, teniendo en cuenta todas las filas de la tabla: SELECT AVG(CANTIDAD _ PEDIDA) FROM MATERIAL La anterior sentencia, internamente, realiza primero una suma de todos los valores, y a continuación la divide por el número total de filas accedidas, es decir, realiza la media aritmética. Volviendo a nuestra cultural base de datos SUPERMERCADOSNEPTUNO, si queremos saber la media del precio de los títulos que tenemos disponibles, deberemos ejecutar el Código fuente SELECT AVG(PRECIOUNIDAD) AS PROMEDIO FROM PRODUCTOS

FUNCION MAX Obtiene el máximo valor del atributo especificado, de entre todas las filas seleccionadas mediante la sentencia SQL. Supóngase, por ejemplo, que tenemos la tabla de materiales descrita anteriormente. Si queremos saber el material mas caro, deberemos realizar un SELECT con la cláusula Max, que obtenga el mayor valor para el atributo precio de todas las filas. Para nuestro ejemplo, si queremos saber cual es el libro más caro, ejecutaremos el Código fuente SELECT MAX(PRECIOUNIDAD) AS CARO FROM PRODUCTOS

FUNCION MIN Obtiene el mínimo valor del atributo especificado, de entre todas las filas seleccionadas mediante la sentencia SQL. Si queremos saber cual es el PRODUCTOS más barato de nuestra base de datos, deberemos ejecutar el Código fuente SELECT MIN(PRECIOUNIDAD) AS BARATO FROM PRODUCTOS

Page 58: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.58

LA CLAUSULA COMPUTE Esta clausula añade una fila en el conjunto de datos que se esta recuperando,se utiliza para realizar calculos en campos numericos.COMPUTE actua siempre sobre un campo o expresion del conjunto de resultados y esta expresion debe figurar exactamente igual en la clausula SELECT y siempre se debe ordenar el resultado por la misma o al menos agrupar el resultado.Esta expresion no puede utilizar ningun ALIAS

SELECT IDPEDIDO,CANTIDAD,NOMBREPRODUCTO,[DETALLES D E 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].PRECIOUN IDAD) BY IDPEDIDO

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

Page 59: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.59

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

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

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

3. Mostrar el Monto total de cada Pedido

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

Page 60: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.60

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

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

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

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

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

Page 61: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.61

7. Mostrar el total de ventas del MES actual del AÑO Actual

SELECT MONTH(FECHAPEDIDO)AS MES,SUM(CANTIDAD*CANTID AD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE MONTH(FECHAPEDIDO)=MONTH(GETDATE()) AND YEAR(FECHAPEDIDO)=YEAR(GETDATE()) GROUP BY MONTH(FECHAPEDIDO)

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

SELECT YEAR(FECHAPEDIDO) AS AÑO,SUM(CANTIDAD*CANTID AD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE YEAR(FECHAPEDIDO)= YEAR(GETDATE()) GROUP BY YEAR(FECHAPEDIDO)

8. Mostrar los tres productos menos vendidos

SELECT TOP 3 NOMBREPRODUCTO,SUM(CANTIDAD) AS [TOTAL VENDIDOS] FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO GROUP BY NOMBREPRODUCTO ORDER BY SUM(CANTIDAD)

9. Mostrar el total de ventas en cada pais

SELECT PAÍSDESTINATARIO,SUM(CANTIDAD*CANTIDAD) AS T OTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO GROUP BY PAÍSDESTINATARIO ORDER BY SUM(CANTIDAD*CANTIDAD)DESC

Page 62: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.62

USO DE SUBCONSULTAS

Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que llamaremos consulta principal.

Se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula HAVING de la consulta principal.

Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre paréntesis, no puede contener la cláusula ORDER BY, ni puede ser la UNION de varias sentencias SELECT, además tiene algunas restricciones en cuanto a número de columnas según el lugar donde aparece en la consulta principal. Estas restricciones las iremos describiendo en cada caso.

Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal. Se aconseja no utilizar campos calculados en las subconsultas, ralentizan la consulta.

Las consultas que utilizan subconsultas suelen ser más fáciles de interpretar por el usuario

Ejemplo:usando SUPERMERCADOSNEPTUNO

Mostrar los productos que tengan un precio mayor al precio promedio de todos los productos

SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE PRECIOUNIDAD>(SELECT AVG(PRECIOUNIDAD) FROM P RODUCTOS)

TEST DE COMPARACION ANY Tenemos el test ANY (algún, alguno en inglés) y el test ALL (todos en inglés). • La subconsulta debe devolver una única columna sino se produce un error. • Se evalúa la comparación con cada valor devuelto por la subconsulta. • Si alguna de las comparaciones individuales produce el resultado verdadero, el

test ANY devuelve el resultado verdadero. • Si la subconsulta no devuelve ningún valor, el test any devuelve falso.

si el test de comparación es falso para todos los valores de la columna, ANY devuelve falso.

• Si el test de comparación no es verdadero para ningún valor de la columna, y es nulo para al menos alguno de los valores, ANY devuelve Nulo.

Page 63: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.63

Ejemplo:usando BDVENTAS

SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ANY (SELECT SUM(CUOTA) FROM EMPLEA DOS GROUP BY OFICINA) En este caso la subconsulta devuelve una única columna con las sumas de las cuotas de los empleados de cada oficina. Y luego se Lista las oficinas cuyo objetivo sea superior a alguna de las sumas obtenidas.

EL TEST DE COMPARACION ALL. • La subconsulta debe devolver una única columna sino se produce un error. • Se evalúa la comparación con cada valor devuelto por la subconsulta. • Si todas las comparaciones individuales, producen un resultado verdadero, el

test devuelve el valor verdadero. • Si la subconsulta no devuelve ningún valor el test ALL devuelve el valor

verdadero. (¡Ojo con esto!) • Si el test de comparación es falso para algún valor de la columna, el resultado

es falso. • Si el test de comparación no es falso para ningún valor de la columna, pero es

nulo para alguno de esos valores, el test ALL devuelve valor nulo. Ejemplo con BDVENTAS: SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ALL (SELECT SUM(CUOTA) FROM EMPLEA DOS GROUP BY OFICINA) En este caso se listan las oficinas cuyo objetivo sea superior A TODAS las sumas

TEST DE PERTENENCIA A CONJUNTO (IN) • Examina si el valor de la expresión es uno de los valores incluidos en la lista de

valores producida por la subconsulta. • La subconsulta debe generar una única columna y las filas que sean. • Si la subconsulta no produce ninguna fila, el test da falso. Tiene la siguiente sintaxis: Ejemplo con BDVENTAS SELECT NUMEMP, NOMBRE, OFICINA FROM EMPLEADOS WHERE OFICINA IN (SELECT OFICINA FROM OFICINAS WHER E REGION = 'ESTE')

Con la subconsulta se obtiene la lista de los números de oficina del este y la consulta principal obtiene los empleados cuyo número de oficina sea uno de los números de oficina del este.

Page 64: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.64

Por lo tanto lista los empleados de las oficinas del este TEST DE EXISTENCIA EXISTS • Examina si la subconsulta produce alguna fila de resultados.

• Si la subconsulta contiene filas, el test adopta el valor verdadero, si la subconsulta no contiene ninguna fila, el test toma el valor falso, nunca puede tomar el valor nulo

• Con este test la subconsulta puede tener varias columnas, no importa ya que el test se fija no en los valores devueltos sino en si hay o no fila en la tabla resultado de la subconsulta.

• Cuando se utiliza el test de existencia en la mayoría de los casos habrá que utilizar una referencia externa. Si no se utiliza una referencia externa la subconsulta devuelta siempre será la misma para todas las filas de la consulta principal y en este caso se seleccionan todas las filas de la consulta principal (si la subconsulta genera filas) o ninguna (si la subconsulta no devuelve ninguna fila)

Ejemplo con BDVENTAS SELECT numemp, nombre, oficina FROM empleados WHERE EXISTS (SELECT * FROM oficinas WHERE region = 'este' AND empleados.oficina = oficinas.oficina) • Este ejemplo obtiene lo mismo que el ejemplo del test IN.Observa que delante

de EXISTS no va ningún nombre de columna. • En la subconsulta se pueden poner las columnas que queramos en la lista de

selección (hemos utilizado el *).Hemos añadido una condición adicional al WHERE, la de la referencia externa para que la oficina que se compare sea la oficina del empleado

NOTA. Cuando se trabaja con tablas muy voluminosas el test EXISTS suele dar mejor rendimiento que el test IN.

RESUMEN DEL TEMA Una subconsulta es una sentencia SELECT que aparece en la lista de selección, o en las cláusulas WHERE o HAVING de otra sentencia SELECT.

1. La subconsulta se ejecuta por cada fila de la consulta principal.

2. Dentro de una consulta se puede utilizar una columna del origen de la consulta principal, una referencia externa.

3. Aunque se puedan anidar subconsultas no es aconsejado más de un nivel de anidamiento.

4. La subconsulta sufre una serie de restricciones según el lugar donde se encuentre.

5. Las condiciones asociadas a las subconsultas son las siguientes:

Page 65: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.65

6. el test de comparación con subconsulta el test ANY ,ALL, IN, EXISTS

MAS EJEMPLOS CON SUBCONSULTAS 1. Mostrar el nombre de la categoria ,el nombre del producto y el precio del producto

mas caro de cada categoria SELECT NOMBRECATEGORÍA, NOMBREPRODUCTO, PRECIOUNIDA D FROM PRODUCTOS INNER JOIN CATEGORÍAS ON PRODUCTOS.IDCATEGORÍA=CATEGORÍAS.IDCATEGORÍA WHERE PRECIOUNIDAD IN (SELECT MAX(PRECIOUNIDAD) FRO M PRODUCTOS WHERE PRODUCTOS.IDCATEGORÍA=CATEGORÍAS.IDCATEGORÍA) 2. Mostrar la lista de los 3 mejores vendedores en base a su total de pedidos

despachados SELECT TOP 3 NOMBRE,APELLIDOS,COUNT(PEDIDOS.IDPEDID O)AS TOTALPEDIDOS FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS. IDEMPLEADO WHERE EMPLEADOS.IDEMPLEADO IN

(SELECT PEDIDOS.IDEMPLEADO FROM PEDIDOS GROUP BY PEDIDOS.IDEMPLEADO)

GROUP BY NOMBRE,APELLIDOS ORDER BY COUNT(PEDIDOS.IDPEDIDO) DESC 3. Mostrar los productos que se hayan vendido con un descuento igual al 25% SELECT * FROM PRODUCTOS WHERE PRECIOUNIDAD ANY(SELECT PRECIOUNIDAD FROM [DETALLES DE PEDIDOS] WHERE DESCUENTO=0.25) 4. Mostrar a los clientes que por lo menos hayan realizado un pedido SELECT CLIENTES.NOMBRECOMPAÑÍA,CLIENTES.TELÉFONO FR OM CLIENTES

Page 66: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.66

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 FROM EMPLEADOS AS T1 WHERE SALARIO= (SELECT AVG(SALARIO) FROM EMPLEADOS WHERE T1.TITULO=EMPLEADOS.TITULO) ORDER BY TITULO 6. Obtiene una lista con el nombre,cargo y salario de todos los agentes de

ventascuyo salario es mayor que el de todos los jefes y directores SELECT APELLIDOS,NOMBRE,CARGO,SALARIO FROM EMPLEADOS WHERE CARGO LIKE ‘AGENTE VENT*’ AND SALARIO ALL(SELECT SALARIO

FROM EMPLEADOS WHERE CARGO LIKE ‘JEFE*’) OR CARGO LIKE

‘*DIRECTOR*’)

7. Obtiene una lista de las compañías y los contactos de todos los clientes que han realizado un pedido en el segundo trimestre de 1995 SELECT DISTINCT NOMBRECONTACTO,NOMBRECOMPAÑIA,CARGOCONTACTO,TELEFON O FROM CLIENTES WHERE IDCLIENTE IN(SELECT DISTINCT IDCLIENTE FROM P EDIDOS 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 V UELOS AS T1 WHERE T1.PLAZASLIBRES>0 AND T1.NUMVUELO=VUELOS.NUMVUELO)

Page 67: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.67

FUNCIONES DE SQL SERVER FUNCIONES DE TIPO FECHA

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

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

DATEADD ( partedeFecha , numero, Fecha )

Parte de fecha Abreviaturas

Year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

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

de pedido

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

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

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

Page 68: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.68

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,DATENA ME(MONTH, FECHAPEDIDO) AS MESPEDIDO FROM PEDIDOS El siguiente es el conjunto de resultados:

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

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

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

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

Page 69: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.69

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

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

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

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

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

El siguiente es el conjunto de resultados:

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

Page 70: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.70

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

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

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

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

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

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

Sintaxis FLOOR ( expresionNumerica )

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

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

Page 71: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.71

POWER Devuelve el valor de la expresión indicada elevada a la potencia especificada. Sintaxis POWER ( expression numerica, EXPONENTE ) Ejemplo elevar el valor 2 al cubo SELECT POWER(2,3) Resultado es igual a 8

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

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

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

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

Ejemplos

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

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

LOWER Convierte de mayúsculas a minusculas Sintaxis

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

SELECT LOWER(NOMBRECOMPAÑIA) FROM CLIENTES

Page 72: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.72

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

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

SELECT LEFT(NOMBREPRODUCTO, 5) FROM

PRODUCTOS

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

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

SELECT RIGHT(NOMBREPRODUCTO, 5) FROM

PRODUCTOS

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

Page 73: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.73

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

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

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

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

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

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

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

El siguiente es el conjunto de resultados:

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

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

Sintaxis STUFF (expressionTexto , PosInicial , longitud , expressiontexto )

Page 74: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.74

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

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

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

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

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

SPACE Devuelve una cadena de espacios repetidos.

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

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

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

Page 75: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.75

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 Seattle WA

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

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

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

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

FROM Empleados ORDER BY nombre

Page 76: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.76

FUNCIONES DE CONVERSION

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

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

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

El siguiente es el conjunto de resultados:

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

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

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

Page 77: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.77

COMANDOS SET

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

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

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

Fecha y hora Tratar datos de fecha y hora.

Bloqueo Tratar el bloqueo en Microsoft SQL Server

Varias Diversa funcionalidad de SQL Server.

Ejecución de consultas Ejecutar y procesar consultas.

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

Estadísticas Presentar información estadística.

Transacciones Tratar transacciones de SQL Server.

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

Valor Primer día de la semana:

1 Lunes

2 Martes

3 Miércoles

4 Jueves

5 Viernes

6 Sábado

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

Domingo

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

Page 78: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.78

SET DATEFORMAT

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

Sintaxis

SET DATEFORMAT { format | @format_var }

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

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

/*Establecemos el formato en Mes Dia Año

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

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

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

SET IDENTITY_INSERT Permite insertar valores explícitos en la columna identidad(Autonumerica) de una tabla.Por ejemplo la tabla PRODUCTOS tiene el campo idproducto como clave primaria y es una columna con la propiedad identidad establecida en si

Ejemplos

En este ejemplo se crea una tabla con una columna de identidad y se muestra cómo se puede usar la opción SET IDENTITY_INSERT para llenar un hueco en los valores de identidad causado por una instrucción DELETE.

Page 79: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.79

1. Tenemos la siguiente tabla

2. Eliminamos la categoria de codigo 7

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

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

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

Page 80: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.80

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

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

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

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

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

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

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

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

Page 81: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.81

USO DE CREATE FUNCTION Microsoft agregó nuevas características a su producto SQL SERVER 2000, y lo más interesante para los programadores del SQL es la posibilidad de hacer funciones definidas por el usuario. La adición de funciones al lenguaje del SQL solucionara los problemas de reutilización del código y dara mayor flexibilidad al programar las consultas de SQL.

TIPOS DE FUNCIONES El servidor 2000 del SQL utiliza estos tipos de funciones:

1. Las funciones escalares, 2. Tabla en linea

Los tres tipos de funciones aceptan parámetros de cualquier tipo. Las funciones escalares devuelven un solo valor, tabla en linea y Multisentencias devuelben un tipo de dato tabla.

I. FUNCIONES ESCALARES Las funciones escalares vuelven un tipo de los datos tal como int, money, varchar, real, etc. Pueden ser utilizadas en cualquier lugar incluso incorporada dentro de sentencias SQL. La sintaxis para una función escalar es la siguiente:

CREATE FUNCTION NombreFuncion ( [@nombreParameter…parameterN]) RETURNS tipoValorRetorno [AS] BEGIN

<instrucciones>

RETURN expresionEscalar END

EJEMPLO:

1. Escriba esto en el analizador de consultas

CREATE FUNCTION SUMA (@VALOR1 INT,@VALOR2 INT) RETURNS INT AS BEGIN RETURN(@VALOR1+@VALOR2) END

Page 82: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.82

2. A continuacion selecciona todo el texto de la funcion y pulsa F5 3. Para confirmar la creacion de la funcion revise el panel izquierdo del

analizador de consultas en su base de datos SUPERMERCADOSNEPTUNO

4. Probemos la funcion ahora

5. SELECT DBO.SUMA(100,500) AS TOTAL

6. Tambien podemos usarla utilizando una tabla:

SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD, DBO.SUMA(PRECIOUNIDAD,10) AS PRECIOINCREMENTADO FROM PRODUCTOS

II. FUNCIONES DE TABLA EN LÍNEA Las funciones de tabla en linea son las funciones que devuelven la salida de una simple declaración SELECT. La salida se puede utilizar adentro de joins o consultas como si fuera un tabla de estándar. CREATE FUNCTION ClientesPorPais(@Pais varchar(25) ) RETURNS TABLE AS RETURN (SELECT * FROM Clientes WHERE País = @pais)

Creamos la funcion y luego invocaremos a la fu ncion de esta forma: SELECT * FROM DBO.CLIENTESPORPAIS('ALEMANIA ')

Page 83: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.83

ALTER FUNCTION Modifica una función existente definida por el usuario, creada anteriormente por la ejecución de la instrucción CREATE FUNCTION, sin cambiar los permisos y sin que afecte a ninguna otra función, procedimiento almacenado o desencadenador dependientes. EJEMPLO :Modificando la funcion SUMA. Para que acepte valores con decimales vamos a cambiar los tipos INT por FLOAT

ALTER FUNCTION SUMA (@VALOR1 FLOAT,@VALOR2 FLOAT) RETURNS FLOAT AS BEGIN RETURN(@VALOR1+@VALOR2) END

Invocando a la FUNCION SUMA: SELECT DBO.SUMA(12.5,2.7)

EJEMPLOS DE FUNCIONES CREATE FUNCTION EDAD( @FECHANACIMIENTO DATETIME, @FECHAACTUAL DATETIME) RETURNS TINYINT AS BEGIN DECLARE @EDAD TINYINT SET @EDAD=DATEDIFF(YEAR,@FECHANAC,@FECHAACT) RETURN @EDAD END Invocando la funcion :SELECT DBO.EDAD(‘22/09/71’,GETDATE()) CREATE FUNCTION PAGOCUOTA(@MONTO MONEY,@CUOTA INT,@INTERES FLOAT) RETURNS MONEY AS BEGIN DECLARE @PAGOINTERES FLOAT DECLARE @MONTOCUOTA FLOAT SET @INTERES=@MONTO*@INTERES SET @MONTOCUOTA=@MONTO/@CUOTA RETURN (@MONTOCUOTA+@PAGOINTERES) END Invocando la funcion :SELECT DBO.PAGOCUOTA(5000,10,0.06)

Page 84: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.84

CREATE FUNCTION PEDIDOSAÑO(@AÑO AS INTEGER)

RETURNS TABLE

AS RETURN

SELECT IDPEDIDO, FECHAPEDIDO, NOMBRECOMPAÑÍA, NOMBR E,

APELLIDOS, PEDIDOS.CARGO

FROM PEDIDOS

INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.I DCLIENTE

INNER JOIN EMPLEADOS ON

PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO

WHERE YEAR(FECHAPEDIDO)=@AÑO

Invocando a la funcion :SELECT * FROM DBO.PEDIDOSAÑO(1995)

ELIMINAR UNA FUNCION Para eliminar una funcion ejecute el comando DROP FUNCTION Ejemplo: DROP FUNCTION DBO.PEDIDOSAÑO

Page 85: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.85

CREACION DE VISTAS CON CREATE VIEW Una vista es una tabla virtual que está definida por una consulta que consiste en una instrucción SELECT. Esta tabla virtual está creada con datos de una o más tablas reales y, para los usuarios, una vista parece una tabla real. De hecho, una vista puede ser tratada del mismo modo que una tabla normal. Los usuarios pueden hacer referencia a estas tablas virtuales con instrucciones Transact-SQL (T-SQL) del mismo modo que se hace con las tablas. En una vista se pueden realizar las operaciones SELECT, INSERT UPDATE y DELETE. En realidad, una vista se almacena simplemente como una instrucción SQL previamente definida. Cuando se accede a la vista, el optimizador de consultas de SQL Server une la instrucción SQL que se ejecuta en ese momento con la consulta que se use para definir la vista.

EJEMPLO: CREATE VIEW ProductosMasCaros AS BEGIN SELECT TOP 5 NOMBREPRODUCTO,PRECIOUNIDAD,UNIDADESEN EXISTENCIA FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC END Invocando la vista: SELECT * FROM ProductosMasCaros

VENTAJAS DE LAS VISTAS • Una ventaja del uso de las vistas es que éstas siempre ofrecen los datos

actualizados. La instrucción SELECT que define una vista sólo se ejecuta cuando se accede a la vista, por tanto, todos los cambios de la tabla subyacente se reflejan en la vista.

• Otra ventaja de usar vistas es que una vista puede tener un nivel diferente de

seguridad del que posea la tabla subyacente. La consulta que define la vista se ejecuta con el nivel de seguridad que posea el usuario que crea la vista. De esta manera, se puede crear una vista que enmascare los datos que no se quieran mostrar a ciertas clases de usuarios.

Page 86: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.86

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

PROCEDIMIENTOS ALMACENADOS Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor. Los procedimientos almacenados de SQL Server, son más potentes, porque permiten almacenar funciones y procedimientos compuestos por varias instrucciones, introducir saltos, bucles, etc. También se pueden compilar procedimiento escritos en lenguaje C, para ampliar su potencia modularmente. Por ejemplo, podemos crear un procedimiento para recuperar el nombre de un Cliente, cuyo código se pasa por parámetro. CREATE PROCEDURE ObtenerNombre @IDCLIENTE varchar(1 1) AS SELECT NOMBRECOMPAÑíA FROM CLIENTES WHERE IDCLIENTE = @IDCLIENTE Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al que se le pasa un parámetro, llamado @idcliente, de tipo varchar(11), que realiza una consulta para obtener el nombre de la tabla clientes, cuyo código coincida con el parámetro. De esta forma, si queremos obtener el nombre del cliente cuyo código sea 'anton', deberemos ejecutar el procedimiento pasándole como argumento este valor:

Page 87: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.87

Las llamadas a procedimientos almacenados se pueden realizar de las siguientes formas: Pasando los argumentos en el mismo orden que en el que se han declarado. Exec ObtenerNombre 'anton' esta sentencia produce la siguiente la salida: Pasando los argumentos nombrados. En este caso no hace falta que los parámetros vayan en el mismo orden. OBTENERNOMBRE @AU_ID = 'ANTON' Ejemplo 2: CREATE PROCEDURE LISTARPEDIDOS ( @IDCLIENTE VARCHAR(7), @FECHAINICIAL SMALLDATETIME, @FECHAFINAL SMALLDATETIME ) AS SELECT PEDIDOS.IDPEDIDO,CLIENTES.NOMBRECOMPAÑÍA,EMPLEADOS. NOMBRE + EMPLEADOS.APELLIDOS AS EMPLEADO,PEDIDOS.CARGO,PEDIDOS.FECHAPEDIDO, PEDIDOS.FECHAENVIO,PEDIDOS.FECHAENTREGA FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.I DCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO WHERE PEDIDOS.IDCLIENTE=@IDCLIENTE AND FECHAPEDIDO BETWEEN @FECHAINICIAL AND @FECHAFINAL Ejecutando el procedimiento almacenado EXEC LISTARPEDIDOS 'ANTON','12/05/95','22/12/96'

Page 88: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.88

PARÁMETROS POR REFERENCIA Si ejecutamos las anteriores sentencias, obtendremos el resultado directamente en la ventana que tengamos abierta en SQL Server. Pero ¿Que pasa si queremos obtener un parámetro de salida, como resultado de la ejecución del procedimiento?. La solución para este caso es utilizar la palabra reservada OUTPUT para los argumentos de salida. Si por ejemplo, queremos obtener el número de clientes y el número de productos que tenemos en la base de datos, crearemos el procedimiento almacenado que muestra el Código fuente. CREATE PROCEDURE num_clientes_productos @clientes i nt OUTPUT, @Productos int OUTPUT AS SELECT * FROM clientes SELECT @clientes = @@ROWCOUNT SELECT * FROM productos SELECT @productos = @@ROWCOUNT RETURN (0)

Vamos a estudiar el anterior ejemplo. Básicamente es similar al anterior. Detrás de la palabra reservada PROCEDURE damos el nombre del procedimiento almacenado, y a continuación proporcionamos los parámetros, junto con su tipo (que en este caso es entero), y diremos sin éstos son de salida, en cuyo caso especificamos la palabra reservada OUTPUT a continuación. Tras la palabra reservada AS se codifica el cuerpo del procedimiento. Primero contamos todas las filas de la tabla clientes, realizando un SELECT * FROM clientes. A continuación devolvemos en el parámetro @clientes el valor obtenido, utilizando @@ROWCOUNT. Acto seguido se realiza lo mismo para la tabla Productos. Nótese como la forma de asignar un valor a un atributo es mediante una sentencia SELECT, igualando el parámetro al valor.

La función @@ROWCOUNT devuelve el número de filas que se han seleccionado. Es equivalente a la sentencia que aparece en el Código fuente

SELECT COUNT(*) FROM Productos

Se podría sustituir por Código fuente

CREATE PROCEDURE num_clientes_productos @clientes i nt OUTPUT, @clientes int OUTPUT AS SELECT @clientes = (SELECT COUNT(*) FROM clientes) 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

Page 89: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.89

Ejecutar el procedimiento. La sintaxis es utilizar la palabra reservada EXEC, seguida del nombre del procedimiento, y los parámetros, separados por comas, especificando si son de retorno. EXEC num_clientes_productos @num_clientes OUTPUT, @ num_productos OUTPUT Mostrar los resultados SELECT clientes = @num_clientes, productos = @num_p roductos Tras ejecutar las anteriores sentencias, obtendremos como resultado el siguiente listado:

EXECUTE Ejecuta una función definida por el usuario que devuelve valores escalares, un procedimiento del sistema, un procedimiento almacenado definido por el usuario o un procedimiento almacenado extendido. Admite también la ejecución de una cadena de caracteres. Ejemplo:

DECLARE @TABLE VARCHAR(25)

SET @TABLE='CLIENTES'

EXEC ('SELECT * FROM ' + @TABLE)

MODIFICAR UN PROCEDIMIENTO ALMACENADO Si queremos modificar un procedimiento almacenado, ejecutaremos la sentencia ALTER PROCEDURE, seguido del nombre del procedimiento. Por ejemplo, si queremos hacer cambios el procedimiento almacenado, creado en el anterior ejemplo, escribiremos el Código fuente ALTER PROCEDURE num_clientes_productos @clientes int OUTPUT, @productos int OUTPUT AS SELECT @clientes = (SELECT COUNT(*) FROM clientes where pais=’alemania’) SELECT @productos = (SELECT COUNT(*) FROM productos where preciounidad>10) RETURN (0)

Page 90: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.90

ELIMINAR UN PROCEDIMIENTO ALMACENADO Si queremos borrar un procedimiento almacenado, ejecutaremos la sentencia DROP PROCEDURE, seguido del nombre del procedimiento. Por ejemplo, si queremos borrar el procedimiento almacenado, creado en el anterior ejemplo, escribiremos el Código fuente DROP PROCEDURE num_clientes_clientes

EJEMPLOS DE PROCEDIMIENTOS ALMACENADOS Utilizar EXECUTE con DEFAULT El ejemplo siguiente crea un procedimiento almacenado con un valor predeterminado para su parametro. Cuando se ejecuta el procedimiento,el valor predeterminado se insertan como parámetro si no se pasa ningún valor en la llamada o si se especifica el valor predeterminado. CREATE PROCEDURE LISTARCLIENTES(@PAIS VARCHAR(25) ='ARGENTINA') AS SELECT IDCLIENTE,NOMBRECOMPAÑÍA,DIRECCIÓN,PAÍS FROM CLIENTES WHERE PAÍS=@PAIS Observe las distintas formas en las que se puede utilizar la palabra clave DEFAULT Sino se especifica el valor del parametro se asume entonces el valor por defecto es decir se tomara entonces el valor “ARGENTINA” EXEC LISTARCLIENTES DEFAULT

CREACION DE TRIGGERS Los disparadores de procedimiento, más comúnmente conocidos como triggers, son una especie de procedimientos almacenados, a diferencia que se ejecutan cuando ocurre un evento sobre alguna tabla. Entendemos por evento, cualquier acción del tipo: • INSERCIÓN • BORRADO • ACTUALIZACIÓN

La sintaxis de la sentencia de creación de triggers es la siguiente: CREATE TRIGGER nombre ON tabla FOR accion AS codigo Donde acción especifica el evento que debe ocurrir para que se dispare el trigger, y que puede ser: • UPDATE: actualización.

Page 91: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.91

• INSERT: inserción. • DELETE: borrado.

Por ejemplo, si queremos crear un trigger llamado modificación_cliente, sobre la tabla Authors , que muestre un mensaje cada vez que se actualiza una fila de la tabla, deberemos escribir el Código fuente CREATE TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Han actualizado la tabla Pedidos" Para comprobar el funcionamiento de este trigger, podemos actualizar cualquier fila de la tabla de clientes, por ejemplo con la sentencia que aparece en el Código fuente UPDATE clientes SET nombre = 'Antonio Moreno' WHERE idcliente = 'anton' Con esto conseguimos dos cosas, actualizar el nombre del cliente cuyo código es el especificado a Miguel, y obtener el mensaje que se muestra como ejecución del trigger de actualización. Sin embargo, los triggers en SQL Server tienen una serie de limitaciones:

1. No se puede disparar un trigger dentro de otro trigger, ya que daría lugar a un bucle infinito

2. Por esta razón, un trigger no puede ejecutar instrucciones DDL (lenguaje de definición

de datos)

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

ELIMINAR UN TRIGGER Para borrar un trigger, deberemos ejecutar la sentencia DROP TRIGGER Por ejemplo, si queremos borrar el trigger anteriormente creado, ejecutaremos el Código fuente DROP TRIGGER modificacion_cliente

MODIFICAR UN TRIGGER Para modificar un trigger, deberemos ejecutar la sentencia ALTER TRIGGER Por ejemplo, si queremos modificar el trigger anteriormente creado, ejecutaremos el Código fuente ALTER TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Los registros de la tabla Pedidos han sido actualizados" Como ya se ha comentado, los triggers o desencadenadores son una especie de procedimientos almacenados, que se ejecutan cuando ocurre una acción dentro de la base de

Page 92: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.92

datos. Así, si por ejemplo se ejecuta una inserción, una actualización, o un borrado de una tabla, se ejecutarían las sentencias definidas para el trigger en concreto de esa tabla específica. Recordamos cual es su sintaxis: CREATE TRIGGER nombre ON tabla FOR [DELETE | INSERT | UPDATE] AS Sentencias Las palabras reservadas DELETE, INSERT y UPDATE corresponden a cada una de las acciones para las cuales se puede definir un desencadenador dentro de la tabla especificada. El bloque de sentencias permite prácticamente cualquier tipo de ellas dentro del lenguaje T-SQL, pero con ciertas limitaciones. Por ejemplo, no se podrá utilizar la sentencia select , ya que un trigger no puede devolver datos al usuario, sino que simplemente se ejecuta para cambiar o comprobar los datos que se van a insertar, actualizar o borrar.

LAS TABLAS DELETED E INSERTED

Dentro de la definición de un trigger, podemos hacer referencia a un par de tablas lógicas, cuya estructura es similar a la tabla donde se esta ejecutando el trigger; es decir, es una copia de la tabla en la cual se van a insertar o borrar los datos, y que contiene, precisamente, los datos que van a ser añadidos o borrados. La utilidad de estas dos tablas es la de realizar comprobaciones entre los datos antiguos y los nuevos.Así, por ejemplo, si queremos recuperar los datos de la tabla que estamos borrando, dentro del trigger,se deberá ejecutar el siguiente código: SELECT * FROM DELETED

TIPOS DE DESENCADENADORES SQL-Server permite la definición de varios tipos de triggers, entre los cuales cabe destacar los siguientes: • DESENCADENADORES MÚLTIPLES:

Para una misma tabla, se pueden definir distintos triggers para la misma acción, es decir, si definimos un trigger para insert, y resulta que dicha tabla ya tenía definido un trigger para esa misma acción, se ejecutarán ambos triggers cuando ocurra dicho evento sobre la tabla.

• DESENCADENADORES RECURSIVOS:

Se permite la recursividad entre las llamadas a los triggers, es decir, un trigger puede llamar a su vez a otro, bien de forma directa, bien de forma indirecta.

• DESENCADENADORES ANIDADOS:

si un trigger cambia una tabla en la que se encuentra definido otro trigger, se provoca la llamada de este último que, si a su vez vuelve a modificar otra tabla, puede provocar la ejecución de otro trigger, y así sucesivamente. Si se supera el nivel de anidamiento permitido, se cancelará la ejecución de los triggers.

Page 93: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.93

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 3. Crear un trigger que no permita registrar un detalle de pedido con un idpedido que no exista en la tabla pedidos CREATE TRIGGER VALIDADETALLE ON DETALLES FOR INSERT AS BEGIN DECLARE @IDPEDIDO INT SET @IDPEDIDO= ISNULL ((SELECT IDPEDIDO FROM PEDIDOS WHERE IDPEDIDO=(SELECT IDPEDIDO FROM INSERTED)),0) IF @IDPEDIDO=0 BEGIN PRINT 'NO SE PUEDE INSERTAR UN PEDIDO' ROLLBACK END END 4. Crear un triger ue no permita la venta de condimentos CREATE TRIGGER PROHIBECONDIMENTOS ON [DETALLES DE PEDIDOS] FOR INSERT AS BEGIN DECLARE @COD INT DECLARE @EXISTE INT SET @COD=(SELECT C.IDCATEGORÍA FROM CATEGORÍAS C WHERE C.NOMBRECATEGORÍA LIKE 'CONDIMENTO%') SET @EXISTE=ISNULL(( SELECT IDPRODUCTO FROM PRODUCTOS WHERE

Page 94: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.94

IDCATEGORÍA=@COD AND IDPRODUCTO= (SELECT IDPRODUCTO FROM INSERTED) ),0) IF @EXISTE<>0 BEGIN PRINT 'NO SE PUEDE VENDER UN CONDIMENTO ESTA SUSPENDIDO' ROLLBACK END END

DESHABILITAR UN TRIGGER Para DESHABILITAR un triger se hace de la siguiente manera ALTER TABLE DETALLES DISABLE TRIGGER PROHIBECONDIMENTOS Para HABILITAR un triger se hace de la siguiente manera ALTER TABLE DETALLES ENABLE TRIGGER PROHIBECONDIMENTOS

Page 95: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.95

S

SESION 5

• SQL Server Management Studio Express (Herramienta de Administración y Consulta)

• Optimizar Base de Datos • Configuración de Servicios • Seguridad en Sql Server 2005 Express Edition

Page 96: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.96

MICROSOFT SQL SERVER MANAGEMENT STUDIO EXPRESS HERRAMIENTAS DE ADMINISTRACION Y CONSULTA

Microsoft SQL Server Management Studio Express (SSMSE) es una herramienta gráfica de administración gratuita y fácil de usar para SQL Server 2005 Express Edition y SQL Server 2005 Express Edition with Advanced Services.

1. SQL Server Express Edition es una edición gratuita de MS SQL Server , con la que podrá utilizar bases de datos SQL sin ningún coste adicional.

Entre sus características podemos destacar:

o SQL Server 100 % compatible : � Con todas sus funcionalidades: transacciones, procedimientos

almacenados, etc. � Facilita a los desarrolladores el escalado de sus aplicaciones a SQL

Server de ediciones superiores. � Desarrollos distribuibles a clientes que trabajen con SQL Server.

o Herramienta de administración y consulta SQL Server Management Studio Express.

o Utiliza un procesador y hasta 1GB de memoria. o Tamaño de bases de datos limitado a 4GB.

MICROSOFT SQL SERVER 2005 EXPRESS EDITION WITH ADVANCED SERVICES Microsoft SQL Server 2005 Express Edition with Advanced Services (SQL Server Express) es una nueva versión gratuita y fácil de usar de SQL Server Express que incluye una nueva herramienta gráfica y eficaces características para la generación de informes y búsquedas de texto avanzadas. SQL Server Express proporciona herramientas de administración eficaces y confiables y características completas, protección de datos y un rendimiento rápido. Es ideal para clientes de aplicaciones incrustadas, aplicaciones Web ligeras y almacenes de datos locales. SQL Server Express with Advanced Services tiene todas las características de SQL Server 2005 Express Edition y, además, puede:

• Administrar fácilmente SQL Server Express con una nueva herramienta gráfica de administración fácil de usar: SQL Server 2005 Management Studio Express (SSMSE).

• Realizar consultas de texto en datos simples basados en caracteres contenidos en tablas de SQL Server. Las consultas de texto pueden contener palabras y frases o formas diversas de una palabra o frase.

• Ejecutar informes de SQL Server Reporting Services de datos relacionales locales.

Page 97: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.97

Requisitos del sistema • Sistemas operativos compatibles: Windows 2000 Service Pack 4;

Windows Server 2003 Service Pack 1; Windows XP Service Pack 2 • Equipo con procesador Intel Pentium III o compatible a 500 MHz o más

rápido (se recomienda 1 GHz o más rápido). • 512 MB de memoria RAM como mínimo (se recomienda 1 GB o más). • 600 MB de espacio disponible en disco duro.

Nota: SQL Server Express with Advanced Services requiere IIS 5.0 o posterior para ejecutar Reporting Services.

Tareas Administrativas en SQL Server 2005 Express con SERVER MANAGEMENT STUDIO

Page 98: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.98

Cómo realizar una copia de seguridad de una base de datos

1. Expanda Bases de datos y, en función de la base de datos, seleccione una base de datos de usuario, o expanda Bases de datos del sistema y seleccione una base de datos del sistema.

2. Haga clic con el botón secundario en la base de datos, seleccione Tareas y haga clic en Copia de seguridad. Aparece el cuadro de diálogo Copia de seguridad de base de datos.

3. En el cuadro de lista Base de datos, verifique el nombre de la base de datos. También puede seleccionar otra base de datos en la lista.

4. Puede realizar una copia de seguridad de la base de datos en cualquier modelo de recuperación (FULL, BULK_LOGGED o SIMPLE).

5. En el cuadro de lista Tipo de copia de seguridad, seleccione Completa. Tenga en cuenta que después de crear una copia de seguridad de la base de datos completa, puede crear una copia de seguridad diferencial

1. En Componente de copia de seguridad, haga clic en Base de datos. 2. Acepte el nombre predeterminado del conjunto de copia de seguridad que

se sugiere en el cuadro de texto Nombre o escriba un nombre diferente para el conjunto de copia de seguridad.

3. Opcionalmente, en Descripción, escriba una descripción del conjunto de copia de seguridad.

4. Especifique cuándo caducará el conjunto de copia de seguridad y se podrá sobrescribir sin omitir explícitamente la comprobación de los datos de caducidad: 1. Para que el conjunto de copia de seguridad caduque en una

determinada fecha, haga clic en El y escriba la fecha en la que caducará.

5. Elija el tipo de destino de la copia de seguridad haciendo clic en Disco o Cinta. Para seleccionar las rutas de hasta 64 unidades de disco o cinta que contengan un solo conjunto de medios, haga clic en Agregar. Las rutas seleccionadas se muestran en el cuadro de lista Copia de seguridad en.

Para eliminar un destino de copia de seguridad, selecciónelo y haga clic en Quitar. Para ver el contenido de un destino de copia de seguridad, selecciónelo y haga clic en Contenido. 6. Para ver o seleccionar las opciones avanzadas, haga clic en Opciones del

panel Seleccionar una página 7. Seleccione una opción de Sobrescribir medios; para ello, haga clic en una

de las opciones siguientes: 1. Hacer copia de seguridad en el conjunto de medios existente

Para esta opción, haga clic en Anexar al conjunto de copia de

Page 99: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.99

seguridad existente o Sobrescribir todos los conjuntos de copia de seguridad existentes. Opcionalmente, seleccione Comprobar nombre de conjunto de medios y fecha de caducidad de conjunto de copia a fin de que la operación de copia de seguridad compruebe la fecha y la hora en que caducan el conjunto de medios y el conjunto de copia de seguridad. También puede escribir un nombre en el cuadro de texto Nombre del conjunto de medios. Si no especifica ningún nombre, se creará un conjunto de medios con un nombre en blanco. Si especifica un nombre para el conjunto, los medios (cinta o disco) se comprueban para ver si el nombre real coincide con el nombre especificado aquí.

2. Hacer copia de seguridad en un nuevo conjunto de medios y borrar todos los conjuntos de copia de seguridad existentes Para esta opción, especifique un nombre en el cuadro de texto Nuevo nombre del conjunto de medios y, si lo desea, describa el conjunto de medios en el cuadro de texto Nueva descripción del conjunto de medios.

8. Opcionalmente, en la sección Confiabilidad, seleccione: 1. Comprobar copia de seguridad al finalizar. 2. Realizar suma de comprobación antes de escribir en los medios y, si

lo desea, Continuar después de un error de suma de comprobación. 9. Si va a realizar copias de seguridad en una unidad de cinta (según se haya

especificado en la sección Destino de la página General), la opción Descargar la cinta después de realizar la copia de seguridad está activa. Al hacer clic en esta opción se activa la opción Rebobinar la cinta antes de descargar.

Para crear una copia de seguridad diferencial de base de datos

1. Expanda Bases de datos y, dependiendo de la base de datos, seleccione

una base de datos de usuario o expanda Bases de datos del sistema y seleccione una base de datos del sistema.

2. Haga clic con el botón secundario en la base de datos, seleccione Tareas y haga clic en Copia de seguridad. Aparece el cuadro de diálogo Copia de seguridad de base de datos.

3. En el cuadro de lista Base de datos, verifique el nombre de la base de datos. También puede seleccionar otra base de datos en la lista.

Puede realizar una copia de seguridad diferencial para cualquier modelo de recuperación (completa, registro masivo o simple).

4. En el cuadro de lista Tipo de copia de seguridad, seleccione Diferencial.

5. En Componente de copia de seguridad, haga clic en Base de datos. 6. Acepte el nombre del conjunto de copia de seguridad predeterminado

sugerido en el cuadro de texto Nombre o especifique otro nombre.

Page 100: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.100

Para restaurar una copia de seguridad completa de la base de datos

1. Expanda Bases de datos. En función de la base de datos, seleccione una base de datos de usuario o expanda Bases de datos del sistema y, a continuación, seleccione una base de datos del sistema.

2. Haga clic con el botón secundario en la base de datos, seleccione Tareas y, a continuación, haga clic en Restaurar.

3. Haga clic en Base de datos, con lo que se abrirá el cuadro de diálogo Restaurar base de datos.

4. En la página General, el nombre de la base de datos en restauración aparecerá en el cuadro de lista A una base de datos. Para crear una nueva base de datos, escriba su nombre en el cuadro de lista.

5. En el cuadro de texto A un momento dado, puede conservar el valor predeterminado (Lo más reciente posible) o seleccionar una fecha y hora determinados haciendo clic en el botón Examinar, que abrirá el cuadro de diálogo Restauración a un momento dado.

6. Para especificar el origen y la ubicación de los conjuntos de copias de seguridad que se deben restaurar, haga clic en una de las opciones siguientes: • Desde base de datos

Escriba un nombre de base de datos en el cuadro de lista. • Desde dispositivos

Haga clic en el botón Examinar, que abrirá el cuadro de diálogo Especificar copia de seguridad. En el cuadro de lista Medio para copia de seguridad, seleccione uno de los tipos de dispositivo. Para seleccionar uno o varios dispositivos del cuadro de lista Ubicación de la copia de seguridad, haga clic en Agregar. Tras agregar los dispositivos que desee al cuadro de lista Ubicación de la copia de seguridad, haga clic en Aceptar para volver a la página General.

7. En la cuadrícula Seleccionar los conjuntos de copia de seguridad que se van a restaurar, seleccione las copias de seguridad que desea restaurar.

8. Pulse el boton Aceptar

Para adjuntar una base de datos

1. En el Explorador de objetos de SQL Server Management Studio, conéctese a una instancia de SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft y, a continuación, expándala.

2. Haga clic con el botón secundario en Bases de datos, seleccione Tareas y, a continuación, haga clic en Adjuntar.

3. En el cuadro de diálogo Adjuntar bases de datos, haga clic en Agregar para especificar la base de datos que se va a adjuntar y en el cuadro de diálogo Buscar archivos de base de datos, seleccione la unidad de disco en

Page 101: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.101

la que se halla la base de datos y expanda el árbol de directorios para buscar y seleccionar el archivo .mdf de la base de datos; por ejemplo: C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\AdventureWorks_Data.mdf

4. Si lo desea, también puede especificar un nombre distinto para la base de datos que va a adjuntar. Para hacerlo, escriba el nombre en la columna Adjuntar como del cuadro de diálogo Adjuntar bases de datos.

5. Si desea cambiar el propietario de la base de datos, seleccione una entrada distinta en la columna Propietario.

6. Cuando esté listo para adjuntar la base de datos, haga clic en Aceptar.

Cómo separar una base de datos 1. En el Explorador de objetos de SQL Server Management Studio,

conéctese a la instancia del SQL Server Database Engine (Motor de base de datos de SQL Server) y expándala.

2. Expanda Bases de datos y seleccione el nombre de la base de datos de usuarios que desee separar.La separación de una base de datos requiere el acceso exclusivo a la base de datos. Si la base de datos está en uso, restrinja el acceso a un único usuario: • Haga clic con el botón secundario en el nombre de la base de datos y

seleccione Propiedades. • En el panel Seleccionar una página, haga clic en Opciones. • En el panel Otras opciones, desplácese hasta las opciones de Estado. • Seleccione la opción Restringir acceso y, en la lista desplegable,

seleccione el modo único (Single). • Haga clic en Aceptar.

Aparecerá un cuadro de mensaje informándole de que esta acción cerrará todas las conexiones a la base de datos. Para continuar, haga clic en Aceptar.

3. Haga clic con el botón secundario en el nombre de la base de datos, seleccione Tareas y, a continuación, haga clic en Separar. Aparecerá el cuadro de diálogo Separar base de datos.

4. En la cuadrícula Bases de datos que se van a separar se muestra el nombre de la base de datos seleccionada en la columna Nombre de la base de datos. Compruebe que ésta es la base de datos que desea separar.

5. En la columna Estado se muestra el estado actual de la base de datos (Listo o No está listo).

6. Antes de separar la base de datos, debe desconectar todas las conexiones activas seleccionando la casilla de verificación Quitar conexiones.

7. Cuando esté listo para separar la base de datos, haga clic en Aceptar.

Page 102: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.102

Reducir bases de datos En SQL Server 2005, pueden reducirse todos los archivos de una base de datos para quitar las páginas que no se utilizan. Aunque Database Engine (Motor de base de datos) aprovechará el espacio de manera efectiva, existen ocasiones en las que un archivo no tiene por qué ser tan grande como lo era anteriormente. En estos casos, la reducción del archivo puede ser necesaria. Pueden reducirse los archivos de datos y los archivos de registro de transacciones. Los archivos de la base de datos se pueden reducir manualmente, en grupo o de uno en uno; también se puede configurar la base de datos para que se reduzca automáticamente a intervalos determinados.

Para Reducir bases de datos 1. Expanda Bases de datos y, a continuación, haga clic con el botón secundario en

la base de datos que desee reducir. 2. Seleccione Tareas y Reducir y haga clic en Base de datos. 3. También puede seleccionar la casilla de verificación Reorganizar archivos antes

de liberar espacio no utilizado. Si se selecciona, debe especificarse un valor en Cantidad máxima de espacio libre en los archivos después de la reducción.

4. Especifique el porcentaje máximo de espacio libre que desee dejar en los archivos de la base de datos después de reducirla. Los valores permitidos oscilan entre 0 y 99. Esta opción sólo está disponible cuando se selecciona Reorganizar archivos antes de liberar espacio no utilizado.

5. Haga clic en Aceptar.

Page 103: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.103

Servicios de sql server 2005

El programa Explorador de SQL Server se ejecuta como un servicio de Windows. El Explorador de SQL Server escucha las solicitudes entrantes de recursos de Microsoft SQL Server y proporciona información acerca de las instancias de SQL Server instaladas en el equipo. El Explorador de SQL Server permite efectuar las siguientes acciones: • Examinar una lista de los servidores disponibles • Conectarse a la instancia correcta del servidor • Conectarse a los extremos de la conexión de administrador dedicada (DAC)

Para cada instancia de Database Engine (Motor de base de datos) y SSAS, el servicio Explorador de SQL Server (sqlbrowser) proporciona el nombre de la instancia y el número de versión. El Explorador de SQL Server se instala con Microsoft SQL Server 2005 y proporciona este servicio para las versiones anteriores de SQL Server que se ejecutan en el equipo, empezando con Microsoft SQL Server 7.0. El Explorador de SQL Server se puede configurar durante la instalación o mediante la herramienta de configuración de superficie. Se puede administrar utilizando el Administrador de configuración de SQL Server. De manera predeterminada, el servicio Explorador de SQL Server se inicia automáticamente:

• Cuando se actualiza una instalación. • Cuando se instala simultáneamente con una instancia de SQL Server 2000. • Cuando se instala en un clúster • Cuando se instala una instancia con nombre de SQL Server 2005 Enterprise

Edition, Standard Edition o Workgroup Edition.

Page 104: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.104

USUARIOS DE SQL SERVER 2005 En el momento de configurar la conexión con SQL Server 2005, indicamos que comenzaríamos la sesión con una cuenta del sistema local. Lo cual quiere decir, que utilizamos la misma cuenta de inicio de sesión de Windows para conectarnos a nuestro servidor de datos. A lo largo de este curso, utilizaremos este modo de autenticación, no obstante, vamos a explicar como crear cuentas de usuario de SQL Server, puesto que se trata del modo de trabajo más seguro. Para crear cuentas de usuario, tenemos habilitada la carpeta Security, que podemos encontrar desplegando el árbol de navegación del explorador de objetos. Dentro de esta carpeta, se almacena la carpeta Logins, la cual muestra en la pestaña principal, las cuentas de usuario que se crean automáticamente por defecto al instalar SQL Server y las creadas por nosotros. Para crear una nueva cuenta, pulsamos el botón derecho del ratón sobre la carpeta inicios de sesion, y seleccionamos Nuevo.

En la siguiente ventana comienza el proceso de creación de la cuenta. En el primer paso (General) indicamos: • El nombre o Login de la cuenta. • El tipo de autenticación para esta cuenta, pudiendo elegir entre

autenticación windows o autenticación SQL Server. Si seleccionamos autenticación Windows, mediante el boton "Search" podemos buscar entre

Page 105: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.105

las cuentas de Windows que existen en nuestro sistema y seleccionar una de ellas.

• En este caso, vamos a crear una cuenta de SQL Server, por lo tanto la seleccionamos y le indicamos el nombre de usuario y su contraseña. Vemos que tenemos la posibilidad de forzar las políticas de contraseñas, las cuales se aseguran que las contraseñas cumplan unas determinadas condiciones de formato, de caducidad, y la posibilidad de que el usuario cambie su contraseña en el momento de iniciar por primera vez su sesión. Estas políticas se encuentras deshabilitadas en la versión Express de Sql Server 2005.

• Base de datos por defecto con la que trabajará el usuario, y el lenguaje por defecto.

Una vez indicadas estas propiedades, vamos a configurar los permisos de acceso de este usuario, para ello, vamos al panel que tenemos a la izquierda y seleccionamos Server Roles. Desde esta pestaña, indicamos las reglas de acceso sobre el servidor, pudiendo elegir entre permisos para administración de procesos, creación de bases de datos, administración de seguridad (crear nuevos usuarios...) etc.

Page 106: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.106

A continuación, le indicamos los permisos específicos que tendrá el usuario para cada base de datos. Para ello le indicamos a que grupo de usuarios pertenecerá el usuario en una base de datos concreta.

Page 107: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.107

Y por último, podemos como administradores del servidor habilitar o deshabilitar la cuenta de usuario que estamos creando, mediante la opción del panel izquierdo Status:

Page 108: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.108

Una vez configuradas todas las propiedades de esta cuenta pulsamos OK para almacenar todos los cambios. Ahora podríamos pulsar sobre el botón para conectarnos al servidor e introducir el login y contraseña de la cuenta SQL Server que hemos creado. Y comprobar los permisos de cuenta que hemos indicado.

Page 109: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.109

S

SESION 6

• Tipos de seguridad. • Modos de seguridad en SQL Server. • Creación de cuentas SQL Server. • Usuarios de bases de datos. • Roles de servidor y roles de bases de datos. Funciones y asignaciones • Permisos.

Page 110: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.110

SEGURIDAD DE SQL SERVER La seguridad es uno de las principales preocupaciones de los administradores de sistemas, redes y base de datos. Mientras un administrador esta implementando la seguridad es natural que pueda estar preocupado por los ataques externos. Pero existe más que eso. Es esencial primero implementar la seguridad dentro de la organización, para asegurar que solo las personas autorizadas tengan acceso a los datos. Si no se establece estas medidas de seguridad, lo mas seguro es encontrar a alguien destruyendo nuestros datos o vendiendo los secretos de la compañía a nuestros competidores, o alguien accediendo a la información privada de otros. Lo primero que se tiene que hacer es un plan de seguridad, el cual identifique que usuarios en la organización pueden ver determinados datos y que actividades deben realizar en la base de datos

MODELO DE SEGURIDAD DE SQL SERVER Para poder acceder a los datos de una base de datos, un usuario tiene que pasar a través de 2 niveles de autenticación: uno en el nivel de SQL Server y el otro en el nivel de base de datos. Estos 2 niveles son implementados usando nombres de logias y cuentas de usuario, respectivamente. Un login valido es requerido para conectarse al SQL Server y una cuenta de usuario valido es requerido para acceder a una base de datos.

LOGIN: Un nombre de login válido es necesario para conectarse a una instancia de SQL Server. Un login puede ser:

Un login de Windows NT/2000/2003 que ha sido concedido el acceso a SQL Server. Un login de SQL Server, que es manejado dentro del SQL Server. Estos nombres de login son manejados dentro de la base de datos master. Esta es una de las razones del porqué es esencial realizar una copia de seguridad después de adicionar nuevos logins a SQL Server .

USER: Una cuenta de usuario válida dentro de una base de datos es requerida para acceder a esta base de datos. Las cuentas de usuario son específicas a una base de datos. Todos los permisos y los propietarios de los objetos son controlados por la cuenta de usuario. Los logins de SQL Server son asociados con estas cuentas de usuarios. Un login puede tener usuarios asociados en diferentes bases de datos, pero únicamente un usuario por base de datos.

Durante una solicitud de nueva conexión, SQL Server verifica el nombre de login suministrado, para asegurar que el login esta autorizado para acceder a SQL Server. Este proceso de verificación es llamado autenticación. SQL Server soporta 2 modos de autenticación :

MODO DE AUTENTICACIÓN DE WINDOWS: Con la autenticación de Windows, no necesitamos especificar un nombre y contraseña de login para conectarse a SQL Server. Debido a que el acceso a SQL Server es controlado por nuestra cuenta de usuario de Windows NT/2000 (o el grupo al cual nuestra cuenta pertenece), que es usado para acceder al sistema operativo en la computadora cliente. Un DBA tiene que especificar a SQL Server todas las cuentas o grupos de Microsoft Windows NT/2000/2003 que pueden conectarse a SQL Server

Page 111: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.111

MODO MIXTO Este modo de autenticación permite a los usuarios conectarse usando autenticación de Windows o autenticación de SQL Server. Nuestro DBA primero tiene que crear una cuenta y contraseña de login válida en SQL Server. Estas cuentas no están relacionadas a las cuentas de Microsoft Windows NT/2000/2003. Con este modo de autenticación, tenemos que suministrar el login y contraseña de SQL Server cuando nos conectamos a SQL Server. Si no especificamos un nombre de login y contraseña de SQL Server o solicitamos Autenticación de Windows, nosotros estaremos autenticándonos usando Autenticación de Windows. Un punto a tener en cuenta es que cualquier modo que se configure en nuestro SQL Server, podemos siempre utilizar la Autenticación de Windows

La Autenticación de Windows es el modo de seguridad recomendado, debido a que es más seguro y no tenemos que enviar nombres de login y contraseñas sobre la red. Nosotros deberíamos evitar usar el Modo Mixto, al menos que tengamos un ambiente que no sea Windows NT/2000/2003, o cuando nuestro SQL Server sea instalado en un Windows 98, o por compatibilidad con aplicaciones existentes

Aquí esta una lista de procedimientos almacenados útiles para manejar logins y usuarios:

sp_addlogin: Crea un login y permite a los usuarios conectarse a SQL Server usando autenticación SQL Server. sp_grantlogin: Permite a una cuenta o grupo de usuarios de Windows NT/2000/2003 conectarse a SQL Server usando Autenticación de Windows. sp_droplogin: Elimina un login de SQL Server. sp_revokelogin: Elimina un login de Windows NT/2000/2003 de SQL Server. sp_denylogin: Previene a un login de Windows NT/2000 de conectarse a SQL Server. sp_password: Adiciona o cambia la contraseña del login de SQL Server. sp_helplogins: Proporciona información acerca de los logins y sus usuarios asociados en cada base de datos. sp_defaultdb: Cambia la base de datos por defecto de un login. sp_grantdbaccess: Adiciona un usuario asociado en la base de datos actual para un login de SQL Server o Windows NT/2000/2003. sp_revokedbaccess: Elimina una cuenta de usuario de la base de datos actual. sp_helpuser: Reporta información acerca de los usuarios y roles de Microsoft en la actual base de datos.

Ahora vamos a hablar acerca de cómo controlar el acceso a los objetos dentro de una base de datos y el manejo de los permisos. Aparte de manejar los permisos en el nivel de usuario de base de datos individual, SQL Server implementa permisos usando roles. En síntesis un rol no es mas que un grupo de los logins y usuarios individuales pueden ser adicionados, para que los permisos puedan ser aplicados a un grupo, en lugar de aplicar los permisos a todos los usuarios y logins en forma individual

Page 112: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.112

Existen 3 tipos de roles en SQL Server:

• Roles de Servidor • Roles de Base de Datos • Roles de Aplicación

ROLES DE SERVIDOR Son los roles que son aplicados a nivel del servidor de SQL Server. Los logins pueden ser adicionados a estos roles para ganar los permisos administrativos asociados de este rol. Un rol de servidor no puede ser alterado y un nuevo rol de servidor no puede ser creado. Los roles de servidor y los permisos asociados a estos en SQL Server son:

sysadmin: Puede realizar cualquier actividad en SQL Server. serveradmin: Puede establecer opciones de configuración a nivel de servidor, como por ejemplo apagar el servidor. setupadmin: Puede manejar servidores enlazados (linked server) y procedimientos de inicio. securityadmin: Puede manejar logins y permisos de CREATE DATABASE, también leer los registros de error y cambio de contraseñas. processadmin: Puede manejar procesos en SQL Server. dbcreator: Puede crear, alterar o eliminar bases de datos. diskadmin: Puede manejar archivos de disco. bulkadmin: Puede ejecutar sentencias BULK INSERT. Aquí está una lista de procedimientos almacenados que pueden ser muy útilies en el manejo de roles de servidor: sp_addsrvrolemember: Adiciona un login como un miembro de un rol de servidor. sp_dropsrvrolemember: Remueve un login de SQL Server, usuario o grupo de Windows de un rol de servidor. sp_helpsrvrole: Retorna una lista de roles de servidor. sp_helpsrvrolemember: Retorna información acerca de los miembros de los roles de servidor. sp_srvrolepermission: Retorna los permisos aplicados a un role de servidor.

ROLES DE BASE DE DATOS Cada base de datos tiene un conjunto definido de roles de base de datos, al cual los usuarios de base de datos pueden ser adicionados. Estos roles de base de datos son únicos dentro de

Page 113: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.113

la base de datos. Mientras los permisos de los roles de base de datos no pueden ser alterados, nuevos roles de base de datos pueden ser creados. Los roles de base de datos y sus permisos asociados en SQL Server son los siguientes:

dbowner: Tiene todos los permisos en la base de datos. db_accessadmin: Puede adicionar o remover usuarios. db_securityadmin: Puede manejar todos los permisos, propiedad de los objetos. db_ddladmin: Puede usar todas las sentencias del lenguaje de definición de datos, menos GRANT, REVOKE o DENY. db_backupoperator: Puede usar las sentencias DBCC, CHECKPOINT y BACKUP . db_datareader: Puede seleccionar todos los datos de cualquier tabla de usuario en la base de datos. db_datawriter: Puede modificar cualquier dato en cualquier tabla de usuario en la base de datos. db_denydatareader: No puede seleccionar algún dato de cualquier tabla en la base de datos. db_denydatawriter: No puede modificar algún dato de cualquier tabla de usuario en la base de datos.

Aquí esta una lista de procedimientos almacenados que pueden ser muy utilies en el manejo de los roles de base de datos. sp_addrole: Crea un nuevo rol de base de datos en la base de datos actual. sp_addrolemember: Adiciona un usuario a un rol de base de datos existente en la base de datos actual. sp_dbfixedrolepermission: Muestra los permisos para cada rol de base de datos. sp_droprole: Remueve un role de base de datos de la base de datos actual. sp_helpdbfixedrole: Retorna una lista de roles de base de datos. sp_helprole: Retorna información acerca de los roles en la base de datos actual. sp_helprolemember: Retorna información acerca de los miembros de un role en la base de datos actual. sp_droprolemember: Remueve usuarios de un rol especifico en la base de datos.

ROLES DE APLICACIÓN Los roles de aplicación simplifican el trabajo de los administradores de base de datos, debido a que ellos no estarían preocupados en manejar los permisos a nivel de usuario individual. Todo lo que necesitan hacer es crear un rol de aplicación y asignar permisos a este rol. La aplicación que está conectándose a la base de datos activa el rol de aplicación y hereda los permisos

Page 114: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.114

asociados con este rol. Alguna de las características de los roles de aplicación son los siguientes:

• No existen roles de aplicación pre-definidos. • Los roles de aplicación no contienen miembros. • Los roles de aplicación necesitan ser activados en tiempo de ejecución, por la

aplicación, usando una contraseña.

Los roles de aplicación sobrescriben los permisos estándar. Por ejemplo, después de activar el rol de aplicación, la aplicación perderá los permisos asociados con el login o la cuenta de usuario usado ientras se conecta a SQL Server y obtiene los permisos asociados con el rol de aplicación.

Los roles de aplicación son específicos a la base de datos. Después de activar un rol de aplicación en una base de datos, si la aplicación quiere ejecutar una transacción a través de base de datos, la otra base de datos tienen que tener habilitado una cuenta de usuario invitado. Aquí están los procedimientos almacenados que son requeridos para manejar los roles de aplicación:

sp_addrole: Adiciona un rol de aplicación en la base de datos actual. sp_approlepassword: Cambia la contraseña de un rol de aplicación en la base de datos actual. sp_dropapprole: Elimina un rol de aplicación de la base de datos actual. sp_setapprole: Activa los permisos asociados con un rol de aplicación en la base de datos actual.

PERMISOS Luego de estudiar los diferentes tipos de roles, vamos a conocer acerca de los permisos de concesión y revocación hacia y desde los usuarios de base de datos y los roles de base de datos y roles de aplicación. Los siguientes comandos de T-SQL son usados para manejar los permisos en el nivel de usuario y rol

GRANT: Concede los permisos específicos (SELECT, DELETE, etc.) a un usuario o rol especifico en la base de datos actual

REVOKE: Remueve un permiso previamente establecido, ya sea GRANT o DENIED de un usuario o rol en la base de datos actual

DENY: Niega un permiso especifico a un usuario o rol especifico de la base de datos actual. Usando los comandos mencionados anteriormente, los permisos pueden ser concedidos, denegados o revocados a usuarios y roles en todos los objetos de la base de datos. Nosotros podemos también manejar permisos a nivel de columna.

La seguridad es un punto crítico por el cual es muy importante que todo administrador de base de datos tenga los conceptos claros del modelo de seguridad de SQL Server con el objetivo de establecer un plan de seguridad efectivo en su organización.

Page 115: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.115

S

SESION 7 • Comandos T-SQL para la optimización de datos • Acceso a Datos vía T-SQL • Manejo de Schemas • Linked Servers (Servidores Enlazados – Configuración y

Administración) • Configuración de Alertas Operadores y Revisión de Sucesos

Page 116: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.116

SCHEMAS SQL Server al igual que los DBMS’s mas comunes en el mercado utiliza el concepto de esquema para definir un dominio de nombres únicos de objeto. A modo de ejemplo, en una base SQL Server no es posible tener 2 tablas de nombre “cliente” dentro de un esquema de nombre “sueldos_desarrollo ”. Pero si podría tener dentro de la misma base la tabla “cliente” en el esquema “sueldos_desarrollo ” y la tabla “cliente” en el esquema “sueldos_testing ”.

En SQL Server 2000 el usuario y el esquema están implícitamente relacionados. Al crear un usuario se crea automáticamente un esquema y un esquema no existe sin su usuario asociado. Este diseño es simple pero tiene algunas desventajas

- Limita la independencia que deberían tener los desarrolladores para trabajar libremente con los objetos de un esquema y los DBA’s para administrar la seguridad del usuario asociado - El nombre del esquema puede resultar poco amigable y no refleja la realidad ya que este nombre coincide con el nombre del usuario asociado al esquema. En SQL Server 2005 este diseño cambia, independizándose el usuario del esquema. Al crear un usuario no se crea un esquema asociado y los esquemas de una base de datos se crean sin asociarse a un usuario

Este diseño tiene algunas ventajas sobre el anterio r

Para eliminar un usuario ya no es necesario eliminar previamente todos los objetos del esquema asociado (pues simplemente no hay esquema asociado) Se puede renombrar un usuario sin tener que renombrar el esquema, lo cual podía implicar un cambio en las aplicaciones que accedían a tablas de dicho esquema Cuando se tenían varios usuarios en una base de datos, al tener cada uno su propio esquema

Page 117: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.117

se corría el riesgo de que un usuario creara tablas u otros objetos en su esquema para el caso en que lo deseable fuera concentrar todas las tablas en un único esquema El nombre de un esquema no tiene porque coincidir con el nombre de un usuario

CREATE SCHEMA (TRANSACT-SQL) Crea un esquema en la base de datos actual. La transacción CREATE SCHEMA también

puede crear tablas y vistas dentro del esquema nuevo, y establecer la concesión, denegación o

revocación (GRANT, DENY o REVOKE ) de permisos sobre esos objetos.

CREATE SCHEMA puede crear un esquema, las tablas y las vistas que lo contienen;

asimismo, puede tener permisos GRANT , REVOKE o DENY para cualquier elemento que

puede protegerse; todo ello en una sola instrucción. Esta instrucción debe ejecutarse como un

lote independiente. Los objetos creados por la instrucción CREATE SCHEMA se crean dentro

del esquema que se está creando

En el ejemplo siguiente se crea el esquema Sprockets, que es propiedad de Annik y contiene la tabla NineProngs. La instrucción concede el permiso SELECT a Mandar y deniega el permiso SELECT a Prasanna. Tenga en cuenta que Sprockets y NineProngs se crean en una sola instrucción USE AdventureWorks; CREATE SCHEMA Sprockets AUTHORIZATION Annik CREATE TABLE NineProngs (source int, cost int, partnumber int) GRANT SELECT TO Mandar DENY SELECT TO Prasanna; GO

OBTENER ACCESO A DATOS EXTERNOS SERVIDORES VINCULADOS Una configuración con servidores vinculados permite a SQL Server ejecutar comandos en orígenes de datos OLE DB situados en servidores remotos. Los servidores vinculados ofrecen las siguientes ventajas:

• Acceso al servidor remoto. • Capacidad de ejecutar consultas distribuidas, actualizaciones,

comandos y transacciones en orígenes de datos heterogéneos en toda la organización.

• Capacidad de tratar diferentes orígenes de datos de manera similar. Un servidor vinculado es un servidor virtual que se ha definido en SQL Server 2005 con toda la información necesaria para obtener acceso a un origen de datos OLE DB. El nombre de un servidor vinculado se define utilizando el procedimiento almacenado del sistema sp_addlinkedserver. La definición del servidor vinculado contiene toda la información necesaria para buscar el origen de datos OLE DB. Los inicios de sesión locales de SQL Server se asignan a inicios de sesión del servidor vinculado utilizando sp_addlinkedsrvlogin. Se puede hacer referencia a las tablas remotas utilizando el nombre de servidor vinculado de alguna de estas formas:

Page 118: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.118

SP_ADDLINKEDSERVER Crea un servidor vinculado. Un servidor vinculado permite obtener acceso a consultas heterogéneas distribuidas en orígenes de datos OLE DB. Después de crear un servidor vinculado mediante sp_addlinkedserver, se pueden ejecutar consultas distribuidas en este servidor. Si el servidor vinculado se define como una instancia de SQL Server, se pueden ejecutar procedimientos almacenados remotos. USAR EL PROVEEDOR MICROSOFT OLE DB PARA ORACLE En el siguiente ejemplo se crea un servidor vinculado llamado LONDON Mktg que utiliza el proveedor Microsoft OLE DB para Oracle y se da por supuesto que el alias SQL*Net para la base de datos Oracle es MyServer . EXEC sp_addlinkedserver @server = 'LONDON Mktg', @srvproduct = 'Oracle', @provider = 'MSDAORA', @datasrc = 'MyServer' GO

Page 119: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.119

USAR EL PROVEEDOR MICROSOFT OLE DB PARA JET EN UNA HOJA DE CÁLCULO EXCEL Para crear una definición de servidor vinculado mediante el proveedor Microsoft OLE DB para Jet para obtener acceso a una hoja de cálculo Excel, primero debe crearse un intervalo con nombre en Excel que especifique las columnas y filas de la hoja de cálculo Excel que han de seleccionarse. Entonces, podrá hacerse referencia al nombre del intervalo como un nombre de tabla en una consulta distribuida.

EXEC sp_addlinkedserver 'ExcelSource', 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', 'c:\MyData\DistExcl.xls', NULL, 'Excel 5.0' GO Para obtener acceso a los datos de una hoja de cálculo Excel, asocie un nombre a un intervalo de celdas. La consulta siguiente se puede utilizar para obtener acceso al intervalo denominado SalesData especificado como una tabla utilizando el servidor vinculado que se creó anteriormente. SELECT * FROM ExcelSource...SalesData GO USAR EL PROVEEDOR MICROSOFT OLE DB PARA JET En el siguiente ejemplo se crea un servidor vinculado llamado SEATTLE Mktg.

En este ejemplo se da por supuesto que se han instalado Microsoft Access y la base de datos de ejemplo Northwind, y que la base de datos Northwind reside en C:\Msoffice\Access\Samples.

EXEC sp_addlinkedserver @server = 'SEATTLE Mktg', @provider = 'Microsoft.Jet.OLEDB.4.0', @srvproduct = 'OLE DB Provider for Jet', @datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb' GO

Page 120: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.120

EL COMANDO BACKUP Y RESTORE BACKUP Realiza una copia de seguridad completa de la base de datos o de uno o varios archivos o grupos de archivos (BACKUP DATABASE). Además, con el modelo de recuperación completa o por medio de registros de operaciones masivas, realiza la copia de seguridad del registro de transacciones (BACKUP LOG). El siguiente ejemplo muestra cómo crear una copia de seguridad completa de la base de datos mediante WITH FORMAT para sobrescribir cualquier copia de seguridad existente y crear un nuevo conjunto de medios. A continuación, en el ejemplo se realiza una copia de seguridad del registro de transacciones. En una situación real, deberá realizar una serie de copias de seguridad de registros periódicas. Para este ejemplo, la base de datos de ejemplo AdventureWorks debe configurarse para utilizar el modelo de recuperación completa. USE master; ALTER DATABASE AdventureWorks SET RECOVERY FULL; GO BACKUP DATABASE AdventureWorks TO DISK = 'C:\Program Files\Microsoft SQL server\MSSQL.1\MSSQL\BACKUP\AdventureWorksFullRM.bak'; WITH FORMAT; GO BACKUP LOG AdventureWorks TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\AdventureWorksFullRM.bak'; GO REALIZAR UNA RESTAURACIÓN DE BASE DE DATOS COMPLETA El objetivo de una restauración completa de la base de datos es restaurar la base de datos completa. Durante el proceso de restauración, la base de datos completa se encuentra sin conexión. Antes de que ninguna parte de la base de datos tenga conexión, se recuperan todos los datos a un punto coherente en el que todas las partes de la base de datos se encuentran en el mismo momento y en el que no existe ninguna transacción sin confirmar. En el modelo de recuperación simple, no se puede restaurar la base de datos a un momento concreto de una copia de seguridad específica.

Page 121: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.121

RESTAURAR UNA BASE DE DATOS COMPLETA

Una restauración completa de base de datos con el modelo de recuperación simple implica una o dos instrucciones RESTORE, en función de si se debe restaurar o no una copia de seguridad diferencial de la base de datos. Si sólo usa copias de seguridad completas de la base de datos, restaure sólo la copia de seguridad más reciente. Si también usa una copia de seguridad diferencial de la base de datos, restaure la copia de seguridad completa más reciente de la base de datos sin recuperar la base de datos y, a continuación, restaure la copia de seguridad diferencial más reciente de la base de datos y recupere la base de datos. Ejemplo En el siguiente ejemplo se muestra primero cómo usar la instrucción BACKUP para crear una copia de seguridad completa y diferencial de la base de datos AdventureWorks. A continuación, se restauran estas copias de seguridad una después de la otra.

En el ejemplo se comienza con una instrucción ALTER DATABASE que establece el modelo de recuperación como SIMPLE. USE master; /*Estableciendo el modo de restauracion */ ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE; GO /*Crear un backup completo*/ BACKUP DATABASE AdventureWorks TO DISK = 'Z:\SQLServerBackups\AdventureWorks.bak' WITH FORMAT; GO /*Crear un backup diferencial*/ BACKUP DATABASE AdventureWorks TO DISK = 'Z:\SQLServerBackups\AdventureWorks.bak' WITH DIFFERENTIAL; GO /*Restaurar Completa*/ RESTORE DATABASE AdventureWorks FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak' WITH FILE=1, NORECOVERY; GO /*Restaurar Diferencial*/ RESTORE DATABASE AdventureWorks FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak' WITH FILE=2, RECOVERY; GO

Page 122: Manual SQL Server

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera SQL Server 2005 Express Pag.122

BULK INSERT (TRANSACT-SQL) Importa un archivo de datos en una tabla o vista de base de datos con un formato especificado por el usuario.

BCP VS BULK INSERT En el caso de bcp mencionado anteriormente como una herramienta, se preguntaran ustedes nuestros lectores ?Una herramienta?, si una herramienta, esta viene incorporada al instalar el SQL Server y la utilizamos directamente desde el Sistema Operativo como si fuese una intruccion común de aquellas que conociamos en el antiguo companero MS-DOS. Esta herramienta se encarga de enviar a cualquier tabla de una base de datos todos los datos de un archivo. quieren ver como? simplemente asi.. bcp BaseDatos..tabla in ArchivoPlano.txt -c -t, -SServidor -UUsuario-PContrasena. En cuanto al BULK INSERT, esta es otra alternativa para nuestras migraciones masivas de datos, solo que debemos de tomar en consideracion de que este es una intruccion no una herramienta. Esto quiere decir que debe de utilizarse desde una herramienta de consulta, como es por ejemplo el Analizador de Consultas. Esta instrucción la implementamos de la siguiente manera: BULK INSERT Tabla FROM 'c:\ArchivoPlano.txt' with(FIELDTERMINATOR = ',',ROWTERMINATOR = '\n' ) Al específicar el with en la intrucción anterior, el parámetro FIELDVALIDATOR es utilizado para específicar a que posicion corresponde cada elemento del archivo para conocer su destino en la tabla, ya que los valores separados por el FIELDVALIDATOR especificado caeran en la tabla en el mismo orden en que se encuentren en el archivo. El ROWTERMINATOR es utilizado para especificar la inserción de nuestra data en la tabla será luego de encontrar el valor especificado en el ROWTERMINATOR, en el caso anterior '\n', que significa al encontrar un salto de línea. (Nota: La n especificada debe ser obligatoriamente escrita en minúscula). Exiten muchos más parámetros para específicarle a la Instrucción BULK INSERT, esto solo es el comienzo, sabemos que ustedes pueden encontrar el Final. SELECT a.* FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;', 'SELECT GroupName, Name, DepartmentID FROM AdventureWorks.HumanResources.Department ORDER BY GroupName, Name') AS a;