Está en la página 1de 122

UNIVERSIDAD NACIONAL DE INGENIERIA

Microsoft

SQL Server 2005


Express Edicin

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.2

UNIVERSIDAD NACIONAL DE INGENIERIA

Presentacion
Microsoft SQL Server 2005 Express Edicin (SQL Server Express) es una plataforma de base de datos que se basa en Microsoft SQL Server 2005. Es tambin la sustitucin de Microsoft Desktop Engine (MSDE). Gracias a su integracin 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 edicin puede servir como base de datos cliente y como base de datos bsica de servidor. Ambas ediciones de SQL Server Express constituyen una opcin idnea 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 caractersticas de base de datos ms avanzadas, puede actualizar SQL Server Express a versiones ms sofisticadas de SQL Server Microsoft SQL Server 2005 Express Edicin (SQL Server Express) se basa en Microsoft SQL Server 2005 y admite la mayora de las caractersticas del Database Engine (Motor de base de datos) de ese producto y de las versiones anteriores de Microsoft SQL Server. Si crea y disea 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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.3

UNIVERSIDAD NACIONAL DE INGENIERIA

Las 10 Caractersticas ms 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 programacin favorito. Soporte XML nativo. Soporte de XCopy para mover Bases de Datos de un sitio a otro. Instalacin robusta y fiable utilizando tanto el interfaz grfico de usuario (graphical user interface - GUI) como el modo silencioso. Servicio y parcheado automatizado. Profunda integracin 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 gestin de bases de datos y anlisis de queries. Implantacin ms 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 Bsqueda de texto Servicios OLAP y minera de datos

Requisitos de instalacion

En la tabla siguiente se muestran los requisitos previos de software y los requisitos mnimos 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 botn secundario en Mi PC y, a continuacin, 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 Microsoft .NET Framework 2.0 de software SP1 de Microsoft Internet Explorer 6.0 o posterior

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.4

UNIVERSIDAD NACIONAL DE INGENIERIA (requisito previo para .NET Framework) Mnimo: 192 MB Recomendado: 512 MB o ms

RAM

Espacio en el disco 600 MB de espacio libre duro Compatible con Pentium III o superior Procesador Mnimo: 500 MHz Recomendado: 1 GHz o ms 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 Sistema operativo 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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.5

UNIVERSIDAD NACIONAL DE INGENIERIA

SESION 1

Qu es el SQL Server?

Herramientas del sistema del SQL Server 2005 EE.

Bases de datos. Componentes lgicos: registro de datos y grupos de archivos de bases de datos.

Roles y responsabilidades del implementado de base de datos.

registro de transacciones. Componentes fsicos: archivos y

Catlogos del sistema.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.6

UNIVERSIDAD NACIONAL DE INGENIERIA

Herramientas del sistema del SQL Server 2005 EE

Configuracin de SQL Server 2005.


Una vez instalado la versin 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 aadido por nuestra instalacin:

Vemos que dentro del paquete Microsoft SQL Server 2005, accedemos a un men con unas herramientas de configuracin, 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 aplicacin y nos encontramos la siguiente pantalla:

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.7

UNIVERSIDAD NACIONAL DE INGENIERIA De todas las posibles herramientas de configuracin 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 ms 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 botn 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 opcin propiedades para configuracin y la ltima una pequea ayuda que nos ofrecen en la instalacin. De nuevo, podemos comparar el servicio de base de datos de SQL Server 2005, con el servicio de pginas Web de IIS, como ya conoces, desde la configuracin de IIS tenemos la opcin de configurar una serie de propiedades, y establecer el estado del servidor de pginas web. De igual manera desde SQL Server Configuration Manager, podemos realizar estas mismas tareas sobre los servicios de base de datos.
Opcin: Funcin:

start

Para activar nuestro servidor de modo manual. Si el servidor se encuentra en funcionamiento, lgicamente esta funcin aparecer deshabilitada, lo mismo suceder con el resto de opciones.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.8

UNIVERSIDAD NACIONAL DE INGENIERIA stop pause Detiene el servidor. Detiene el servidor momentneamente. Una vez detenido el servidor mediante "pause", lo vuelve a poner en marcha. Detiene el servidor, e inmediatamente vuelve a activarlo. Accedemos a una ventana para llevar a cabo varias configuraciones. Pequea ayuda sobre este servicio.

resume

restart

propiedades

ayuda

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

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.9

UNIVERSIDAD NACIONAL DE INGENIERIA 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 administracin. Cuando instalamos nuestros servicios en el servidor de una empresa debemos operar de diferente mtodo, creando un usuario especfico para la administracin de la base de datos, es bastante lgico crear un usuario para esta tarea, ya que es posible que modifiquemos las caractersticas 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 disposicin una serie de botones para actuar sobre el estado del servidor. Sigamos con la configuracin pinchando en la pestaa Service.

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

Automatico

Con esta opcin, el servidor arrancar conjuntamente con el sistema, es decir, cuando nuestro sistema operativo arranque, el servidor de base de datos se activar automticamente, esta es la opcin ms habitual y recomendad, ya que

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.10

UNIVERSIDAD NACIONAL DE INGENIERIA nuestro servidor estar permanentemente ofreciendo sus servcios. Deshabilitado Deshabilitamos el arranque del servidor. El modo de gestionar el estado del servidor ser manual por parte del desarrollador mediante las opciones que vimos anteriormente.

Manual

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

Herramienta de administracin y gestin de SQL Server 2005


Con la instalacin y la configuracin que acabamos de ver ya podramos comenzar a trabajar con las bases de datos. Para crear y gestionar nuestras tablas, procedimientos almacenados, etc nos veramos obligados a hacerlo desde Visual Studio. Pero, como ya sabes, el objetivo final del curso es el desarrollo de una aplicacin 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 configuracin y debemos descargarla por separado desde la pgina de Microsoft. Por si nunca la has descargado o instalado te dejo el enlace para descargarla, basta con descargar y seguir el asistente de instalacin, es el mismo enlace que has encontrado en el anterior capitulo. Una vez instalada esta herramienta, vemos que ha sido aadida a nuestro paquete de software de SQL Server 2005:

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

un

conjunto

de

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 sla, y no en paquetes separados. Vamos a ir viendo paso a paso, como trabajar con esta herramienta. De modo que al finalizar este captulo, tengamos creada una base de datos y seas capaz ms adelante de crear tus propias bases de datos, con sus tablas bien estructuradas,

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.11

UNIVERSIDAD NACIONAL DE INGENIERIA etc... Por lo tanto combinaremos explicaciones sobre SQL Server Mangement Studio con otros aspectos importantes del diseo de base de datos. Comencemos con la herramienta, desde el men de inicio arrancamos la aplicacin y nos encontramos con una ventana de conexin.

Desde esta ventana, te debe recordar a lo explicado en las herramientas de configuracin. 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: Funcin:

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 conexin desde .NET. Si elegimos la opcin " Autenticacion Windows" estaremos conectando con la misma cuenta de usuario con la que iniciamos nuestro sistema. Trabajaremos con esta opcin a lo largo del curso. Si seleccionamos " Autenticacion SQL Server" deberemos indicar con que cuenta vamos a conectar e introducir la

Autenticacion:

Autenticacion Windows Autenticacion SQL Server

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.12

UNIVERSIDAD NACIONAL DE INGENIERIA contrasea especfica para conectar con SQL Server. Con la versin SQL Server 2005 Express es ms recomendable trabjar con "Windows Authentication" ya que de otro modo podemos encontrar problemas por la limitacin de la versin gratuita. Elegidas nuestras opciones adecuadas pulsaremos en conectar, en ese momento nos muestra una ventana con el proceso de conexin y si todo ha resultado correcto, arranca nuestra herramienta de administracin.

Nota: En este curso utilizaremos esta herramienta para disear bases de datos, crear cuentas de usuario y ejecutar nuestras sentencias SQL, necesarias para la gestin de datos, mediante el administrador de consultas. Todo lo dems quedara para un curso especfico de administracin y mantenimiento de bases de datos con SQL Server 2005. Por lo tanto no te preocupes al observar que no se explican todas las caractersticas, ya que las tareas que vamos a aprender, son las necesarias para desarrollar nuestras aplicaciones.

Bases de datos de SQL Server


Componentes lgicos: registro de datos y registro de transacciones.
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.13

UNIVERSIDAD NACIONAL DE INGENIERIA SQL Server 2005 asigna una base de datos a un conjunto de archivos del sistema operativo. Los datos y la informacin del registro nunca se mezclan en el mismo archivo, y cada archivo slo 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 colocacin de datos y administrativas, como las operaciones de copia de seguridad y restauracin. 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 extensin 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 extensin de nombre de archivo recomendada para los archivos de datos secundarios es .ndf. Archivos de registro Los archivos de registro almacenan toda la informacin de registro que se utiliza para recuperar la base de datos. Como mnimo, tiene que haber un archivo de registro por cada base de datos, aunque puede haber varios. La extensin 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 informacin de ubicacin del archivo de la base de datos master. Sin embargo, Database Engine (Motor de base de datos) utiliza la informacin de ubicacin del archivo principal para inicializar las entradas de ubicacin de archivos de la base de datos master en las siguientes situaciones: Al adjuntar una base de datos mediante la instruccin CREATE DATABASE con la opcin FOR ATTACH Al actualizar de SQL Server versin 2000 o versin 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 lgico tiene que cumplir las reglas de los identificadores de SQL Server y tiene que ser nico entre los nombres de archivos lgicos de la base de datos. os_file_name os_file_name es el nombre del archivo fsico que incluye la ruta de acceso al directorio. Debe seguir las reglas para nombres de archivos del sistema operativo. La siguiente ilustracin muestra ejemplos de los nombres de archivo lgico y fsico de una base de datos creada en una instancia predeterminada de SQL Server 2005:

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.14

UNIVERSIDAD NACIONAL DE INGENIERIA

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 caractersticas 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. Slo las bases de datos de slo lectura y los grupos de archivos secundarios de slo lectura se pueden colocar en un sistema de archivos NTFS comprimido. Para obtener ms informacin, vea Grupos de archivos de slo lectura y compresin. 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. Pginas de archivo de datos Las pginas de un archivo de SQL Server 2005 estn numeradas secuencialmente, comenzando por 0 para la primera pgina del archivo. Cada archivo de una base de datos tiene un nmero de identificador nico. Para identificar de forma nica una pgina de una base de datos, se requiere el identificador del archivo y el nmero de la pgina. El siguiente ejemplo muestra los nmeros de pgina de una base de datos que tiene un archivo de datos principal de 4 MB y un archivo de datos secundario de 1 MB.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.15

UNIVERSIDAD NACIONAL DE INGENIERIA

La primera pgina de cada archivo es una pgina de encabezado de archivo que contiene informacin acerca de los atributos del archivo. Algunas de las otras pginas del comienzo del archivo tambin contienen informacin de sistema, como mapas de asignacin. Una de las pginas de sistema almacenadas en el archivo de datos principal y en el archivo de registro principal es una pgina de inicio de la base de datos que contiene informacin acerca de los atributos de la base de datos. Para obtener ms informacin acerca de las pginas y los tipos de pginas, vea Pginas y extensiones. Tamao de archivo Los archivos de SQL Server 2005 pueden crecer automticamente a partir del tamao originalmente especificado. Cuando se define un archivo, se puede especificar un incremento de crecimiento. Cada vez que se llena el archivo, el tamao aumenta en la cantidad especificada. Si hay varios archivos en un grupo de archivos, no crecern automticamente hasta que todos los archivos estn llenos. A continuacin, el crecimiento tiene lugar por turnos. Cada archivo tambin puede tener un tamao mximo especificado. Si no se especifica un tamao mximo, el archivo puede crecer hasta utilizar todo el espacio disponible en el disco. Esta caracterstica es especialmente til cuando SQL Server se utiliza como una base de datos incrustada en una aplicacin para la que el usuario no dispone fcilmente de acceso a un administrador del sistema. El usuario puede dejar que los archivos crezcan automticamente cuando sea necesario y evitar as las tareas administrativas de supervisar la cantidad de espacio libre en la base de datos y asignar ms espacio manualmente.

Catlogos del sistema

Las aplicaciones dinmicas que no estn codificadas de forma rgida para funcionar con un conjunto especfico 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 informacin como la siguiente: El nmero y nombre de las tablas y vistas de una base de datos. El nmero de columnas de una tabla o vista, junto con el nombre, el tipo de datos, la escala y la precisin de cada columna. Las restricciones definidas en una tabla. Los ndices y las claves definidos para una tabla.

El catlogo del sistema de SQL Server 2005 proporciona esta informacin para las bases de datos de SQL Server. El ncleo de los catlogos 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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.16

UNIVERSIDAD NACIONAL DE INGENIERIA

SESION 2
Generacin de scripts en SQL Transact. Lenguaje SQL Transact DML para la manipulacin de los datos. Insercin de filas - sentencia INSERT. Actualizacin de filas - sentencia UPDATE. Eliminacin de filas - sentencia DELETE

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.17

UNIVERSIDAD NACIONAL DE INGENIERIA

GENERACIN 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 aplicacin En esta leccin se muestra cmo crear una base de datos, crear una tabla en la base de datos y, a continuacin, tener acceso a los datos de la tabla y cambiarlos. Puesto que esta leccin es una introduccin al uso de Transact-SQL, no usa ni describe las mltiples 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 tambin 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 grfica de administracin gratuita y fcil 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 continuacin, haga clic en SQL Server Management Studio. 2. En el cuadro de dilogo Conectar al servidor, compruebe la configuracin predeterminada y, a continuacin, 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 tambin debe contener el nombre de la instancia con el formato<nombreDeEquipo>\<nombreDeInstancia>

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.18

UNIVERSIDAD NACIONAL DE INGENIERIA 2- Con el botn derecho (o el botn 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 despus pulsa en el botn Aceptar.

Figura 3. Cuadro de dilogo de Nueva base de datos Profesor Henry Chavez Viera SQL Server 2005 Express Pag.19

UNIVERSIDAD NACIONAL DE INGENIERIA

COMANDO CREATE DATABASE

Sintaxis del comando Create Database: NAME = Nombre_del_archivo_lgico, FILENAME = Nombre_del_archivo_en_el_sistema (path completo) SIZE = TAMAO (inicial) MAXSIZE = (tamao_mximo | UNLIMITED) (Tamao mximo que puede tener la base de datos, UNLIMITED = tamao ilimitado) FILEGROWTH = Incremento del archivo (crecimiento en MB) 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 ) ------------------------------------------------------------------------------

ABRIR SU BASE DE DATOS


USE VENTAS

2. Seleccione todas las instrucciones y pulse F5

1. Escribe el comando siguiente : 2. Seleccione el comando y pulse F5

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.20

UNIVERSIDAD NACIONAL DE INGENIERIA

MODIFICAR UNA BASE DE DATOS CREADA

COMANDO ALTER DATABASE


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

AADIR UN GRUPO DE ARCHIVOS A LA BASE DE DATOS


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

UNIVERSIDAD NACIONAL DE INGENIERIA

AADIR ARCHIVOS LOG A LA BASE DE DATOS


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

ELIMINAR FICHEROS DE LA BASE DE DATOS


USE MASTER GO ALTER DATABASE DBEMPRESA REMOVE FILE Emp_dat4 GO

MODIFICAR UN ARCHIVO DE DATOS


USE master GO ALTER DATABASE BDEMPRESA MODIFY FILE (NAME = Emp_dat3, SIZE = 20MB) GO

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'

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.22

UNIVERSIDAD NACIONAL DE INGENIERIA

CREACIN DE TABLAS

Para crear una tabla en su base de datos utilice el comando CREATE TABLE

COMANDO CREATE TABLE

CREATE TABLE Empleados (Nombre VARCHAR (25), Apellidos VARCHAR (50)) (Crea una nueva tabla llamada Empleados con dos campos, uno llamado Nombre de tipo VarChar y longitud 25 y otro llamado apellidos con longitud 50). CREATE TABLE Empleados ( Nombre VARCHAR (10), Apellidos VARCHAR, FechaNacimiento DATETIME ) CONSTRAINT ndicegeneral UNIQUE ( Nombre, Apellidos, FechaNacimiento) Resultado: Tabla Empleados Nombre Apellidos FechaNacimiento

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

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)
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.23

UNIVERSIDAD NACIONAL DE INGENIERIA

GENERAR UN CAMPO AUTOGENERADO


Se puede generar un campo que sera el producto de una operacin entre otros campos Por ejemplo PROMEDIO es el producto del calculo de la suma de N1+N2+N3 CREATE TABLE NOTAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, N1 DECIMAL NOT NULL, N2 DECIMAL NOT NULL, N3 DECIMAL NOT NULL, PROMEDIO AS N1+N2+N3, APROBADO BIT NOT NULL)

GENERAR UN VALOR PREDETERMINADO PARA UN CAMPO


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

GENERAR UNA REGLA PARA UN CAMPO DE UNA TABLA


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

UTILIZAR EL TIPO DE DATOS UNIQUEIDENTIFIER EN UNA COLUMNA


Este ejemplo crea una tabla con una columna UNIQUEIDENTIFIER. Utiliza una restriccin PRIMARY KEY para impedir que los usuarios inserten valores duplicados y utiliza la funcin NEWID() de la restriccin DEFAULT para proporcionar valores para las nuevas filas. CREATE TABLE PROFESORES (IDPROFESOR UNIQUEIDENTIFIER CONSTRAINT Guid_Default DEFAULT NEWID(), NOMBRES VARCHAR(60), CONSTRAINT Guid_PK PRIMARY KEY (IDPROFESOR)

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.24

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)

UNIVERSIDAD NACIONAL DE INGENIERIA

GENERAR UN CAMPO AUTOGENERADO

Se puede generar un campo que sera el producto de una operacin entre otros campos Por ejemplo PROMEDIO es el producto del calculo de la suma de N1+N2+N3 CREATE TABLE NOTAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, N1 DECIMAL NOT NULL, N2 DECIMAL NOT NULL, N3 DECIMAL NOT NULL, PROMEDIO AS N1+N2+N3, APROBADO BIT NOT NULL)

GENERAR UN VALOR PREDETERMINADO PARA UN CAMPO


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

GENERAR UNA REGLA PARA UN CAMPO DE UNA TABLA


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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.25

UTILIZAR EL TIPO DE DATOS UNIQUEIDENTIFIER EN UNA COLUMNA


Este ejemplo crea una tabla con una columna UNIQUEIDENTIFIER. Utiliza una restriccin PRIMARY KEY para impedir que los usuarios inserten valores duplicados y utiliza la funcin NEWID() de la restriccin DEFAULT para proporcionar valores para las nuevas filas. CREATE TABLE PROFESORES (IDPROFESOR UNIQUEIDENTIFIER CONSTRAINT Guid_Default DEFAULT NEWID(), NOMBRES VARCHAR(60), CONSTRAINT Guid_PK PRIMARY KEY (IDPROFESOR)

UNIVERSIDAD NACIONAL DE INGENIERIA

CREAR UNA TABLA CON UNA CLAVE PRIMARIA COMPUESTA


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

CREAR UNA TABLA EN UN GRUPO DE ARCHIVOS


Este ejemplo crea la tabla NOTAS en un grupo GP_EVALUACIONES de la base de datos BDCOLEGIO CREADA ANTERIORMENTE CREATE TABLE NOTAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, N1 DECIMAL NOT NULL, N2 DECIMAL NOT NULL, N3 DECIMAL NOT NULL, PROMEDIO AS N1+N2+N3, APROBADO BIT NOT NULL) ON GP_EVALUACIONES Este ejemplo crea una tabla MATRICULAS y lo aade al grupo existente GP_MATRICULAS CREATE TABLE MATRICULAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, FECHAMATRICULA DATETIME NOT NULL, PROMEDIO AS N1+N2+N3) ON GP_MATRICULAS

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.26

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.

UNIVERSIDAD NACIONAL DE INGENIERIA

Este ejemplo asume las tablas

que

CATEGORIAS Y PROVEEDORES ya existen

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.27

UNIVERSIDAD NACIONAL DE INGENIERIA

2. En este segundo ejemplo se crea una tabla PEDIDOS la cual se relaciona con las tablas CLIENTES y EMPLEADOS que ya existen CREATE TABLE PEDIDOS (IDPEDIDO INT IDENTITY NOT NULL PRIMARY KEY,FECHAPEDIDO, IDCLIENTE INT REFERENCES CLIENTES(IDCLIENTE) ON UPDATE CASCADE ON DELETE CASCADE, IDEMPLEADO INT REFERENCES EMPLEADOS(IDEMPLEADO) ON UPDATE CASCADE ON DELETE CASCADE, FECHAENVIO DATETIME,CARGO MONEY,UNIDADESENEXISTENCIA INT, UNIDADESENPEDIDO INT,NIVELNUEVOPEDIDO TINYNT,SUSPENDIDO BIT)

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

MODIFICAR TABLAS DE LA BASE DE DATOS

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.28

UNIVERSIDAD NACIONAL DE INGENIERIA

Entendemos por modificar una tabla, cambiar su estructura, es decir, aadir atributos, borrarlos, o cambiar la definicin. La sentencia que permite modificar una tabla es la que muestra

LA SENTENCIA ALTER TABLE


Su sintaxis es la descrita en el Cdigo fuente

ALTER TABLE tabla ADD atrib tipo NULL


Ejemplos Aadir una nueva columna a una tabla CREATE TABLE CONTACTOS ( TIPO AS VARCHAR(20),DIRECCION VARCHAR(50)) GO ALTER TABLE CONTACTOS ADD NOMBRECONTACTO VARCHAR(20) NOT NULL GO Eliminar una columna de una tabla ALTER TABLE CONTACTOS DROP COLUMN DIRECCION Aadir una nueva columna con una restriccin ALTER TABLE CONTACTOS ADD EDAD TINYINT NULL CONSTRAINT ED_unique UNIQUE Aadir una restriccin no validada a una tabla ALTER TABLE CONTACTOS WITH NOCHECK ADD CONSTRAINT Edad_check CHECK (EDAD > 1) GO Aadir varias columnas con restricciones ALTER TABLE CONTACTOS ADD /* Aadir una columna como clave primaria */ IDCONTACTO INT IDENTITY CONSTRAINT Idcontacto_pk PRIMARY KEY, /* Aadir una columna con una restriccin de comprobacion */ CIUDAD VARCHAR(16) NULL CONSTRAINT column_d_chk CHECK (column_d IS NULL OR column_d LIKE "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" OR column_d LIKE "([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"), /* Aadir una columna con valor por defecto */ column_e DECIMAL(3,3) CONSTRAINT column_e_default DEFAULT .081 GO Aadir una columna con valor por defecto y NULL
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.29

UNIVERSIDAD NACIONAL DE INGENIERIA

ALTER TABLE VIDEOS ADD FECHAESTRENO smalldatetime NULL CONSTRAINT FECHA_C1 DEFAULT getdate() WITH VALUES Deshabilitar y habilitar una restriccin CREATE TABLE empleado (id INT NOT NULL, nombre VARCHAR(10) NOT NULL, salario MONEY NOT NULL CONSTRAINT salario CHECK (salario < 100000) ) -- Inserciones validas INSERT INTO empleado VALUES (1,"Joe Brown",65000) INSERT INTO empleado VALUES (2,"Mary Smith",75000) -- Insercin que viola la restriccin INSERT INTO empleado VALUES (3,"Pat Jones",105000) -- Deshabilitar la restriccin ALTER TABLE empleado NOCHECK CONSTRAINT salario INSERT INTO empleado VALUES (3,"Pat Jones",105000) -- Habilitar la restriccin ALTER TABLE empleado CHECK CONSTRAINT salario INSERT INTO empleado VALUES (4,"Eric James",110000)

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.30

UNIVERSIDAD NACIONAL DE INGENIERIA

Este ejemplo crea una tabla MATRICULAS y lo aade al grupo existente GP_MATRICULAS CREATE TABLE MATRICULAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, FECHAMATRICULA DATETIME NOT NULL, PROMEDIO AS N1+N2+N3) ON GP_MATRICULAS

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(IDCATEGORA) 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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.31

UNIVERSIDAD NACIONAL DE INGENIERIA

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

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 explcitamente borrado, la instruccin 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, aadir atributos, borrarlos, o cambiar la definicin. La sentencia que permite modificar una tabla es la que muestra

LA SENTENCIA ALTER TABLE


Profesor Henry Chavez Viera SQL Server 2005 Express Pag.32

UNIVERSIDAD NACIONAL DE INGENIERIA

Su sintaxis es la descrita en el Cdigo fuente

ALTER TABLE tabla ADD atrib tipo NULL


Ejemplos Aadir una nueva columna a una tabla CREATE TABLE CONTACTOS ( TIPO AS VARCHAR(20),DIRECCION VARCHAR(50)) GO ALTER TABLE CONTACTOS ADD NOMBRECONTACTO VARCHAR(20) NOT NULL GO

ELIMINAR UNA COLUMNA DE UNA TABLA


ALTER TABLE CONTACTOS DROP COLUMN DIRECCION Aadir una nueva columna con una restriccin ALTER TABLE CONTACTOS ADD EDAD TINYINT NULL CONSTRAINT ED_unique UNIQUE Aadir una restriccin no validada a una tabla ALTER TABLE CONTACTOS WITH NOCHECK ADD CONSTRAINT Edad_check CHECK (EDAD > 1) GO

AADIR VARIAS COLUMNAS CON RESTRICCIONES


ALTER TABLE CONTACTOS ADD /* Aadir una columna como clave primaria */ IDCONTACTO INT IDENTITY CONSTRAINT Idcontacto_pk PRIMARY KEY, /* Aadir una columna con una restriccin de comprobacion */ CIUDAD VARCHAR(16) NULL CONSTRAINT column_d_chk CHECK (column_d IS NULL OR column_d LIKE "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" OR column_d LIKE "([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"), /* Aadir una columna con valor por defecto */ column_e DECIMAL(3,3) CONSTRAINT column_e_default DEFAULT .081 GO Aadir una columna con valor por defecto y NULL ALTER TABLE VIDEOS ADD FECHAESTRENO smalldatetime NULL CONSTRAINT FECHA_C1 DEFAULT getdate() WITH VALUES Deshabilitar y habilitar una restriccin

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.33

UNIVERSIDAD NACIONAL DE INGENIERIA

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.34

UNIVERSIDAD NACIONAL DE INGENIERIA

CREACIN DE NDICES

La creacin de ndices en SQL Server, as como en la mayora de los SGBDR existentes, se debe realizar junto con la creacin de la estructura de las tablas. De este modo se evitan posibles colisiones que pueden surgir al crear ndices cuando la tabla ya tiene datos. Por ejemplo, si creamos un ndice nico por un campo, esto es no puede admitir duplicados, y se encuentran valores no nicos, la generacin del ndice dara un error. Sin embargo, SQL Server permite la creacin de ndices, aunque la base de datos est cargada. ALTER TABLE TABLA ADD CONSTRAINT K1 PRIMARY KEY (COD1, COD2) Esta sentencia permite aadir una clave primaria en tabla, por los campos cod1 y cod2. Para crear un ndice en la tabla todos, denominado Cdigo, por el campo cod_cliente, se debe especificar el Cdigo fuente CREATE INDEX CODIGO ON TODOS (COD_CLIENTE) S adems queremos que el ndice no admita valores nulos, se debe ejecutar el Cdigo fuente CREATE UNIQUE INDEX codigo ON todos (cod) WITH IGNORE_DUP_KEY La sentencia que se encarga de borrar un ndice, se muestra en el Cdigo fuente Esta sentencia se encarga de borrar el ndice cdigo creado anteriormente. DROP INDEX codigo Mas Ejemplos de indices con la siguiente tabla La tabla EMPLEADOS ya dispone de un indice que se genera automaticamente cuando se crea la clave Primaria vamos a aadir dos indices mas. 1. CREATE INDEX IDX_NOMB ON EMPLEADOS(NOMBRE) 2. CREATE INDEX IDX_APE ON EMPLEADOS(APELLIDOS) Si desea hacer una seleccin de los registros de la tabla Empleados utilizando uno de sus indices creados en el ejemplo anterior haga lo siguiente: SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS(INDEX=2) SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS(INDEX=3) El numero 2 hace referencia al indice por el campo NOMBRE y el numero 3 por el campo APELLIDOS .El numero 1 esta reservado para el IDPRODUCTO que es la clave primaria Para obtener informacion acerca de los indices que tiene su tabla ejecute el procedimiento almacenado SP_HELPINDEX Ejemplo: SP_HELPINDEX empleados /*empleados es el nombre de la tabla
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.35

UNIVERSIDAD NACIONAL DE INGENIERIA

EL LENGUAJE DE MANIPULACIN DE DATOS (DML)


Ya se ha visto en un captulo anterior el lenguaje de definicin de datos (DDL), que es el que permite definir y modificar la estructura de un esquema. Veremos a continuacin el otro lenguaje, el de manipulacin de datos, que nos permite, como su propio nombre indica, manejar los datos contenidos en el esquema.

LA SENTENCIA INSERT
La otra gran sentencia de manipulacin de datos es INSERT. Si SELECT nos permita recuperar datos, INSERT nos va a permitir aadirlos al esquema, es decir, con esta sentencia podemos aadir informacin a la base de datos. Recordemos que estamos en el modelo relacional, por lo que la informacin se aadir a una tabla en forma de filas. Si slo queremos insertar un valor para un atributo, el resto de los de la tabla deber contener el valor nulo (NULL). Sin embargo, habr ciertas ocasiones en que esto no ser posible, cuando el atributo est definido como NO NULO, en cuyo caso deberemos especificar un valor para ste. La sintaxis de esta sentencia es:

INSERT INTO tabla (atributos) VALUES (valores)


Donde tabla especifica la tabla en la cual se aadir la fila, atributos es una lista de atributos separados por comas que determinan los atributos para los cuales se darn valores, y valores especficos los valores que se darn para estos atributos, separados por comas. Por ejemplo, si queremos aadir un nuevo cliente a nuestra base de datos, deberemos ejecutar el Cdigo .

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


Destacar que si el valor a introducir es alfanumrico, deber ir encerrado entre comillas, mientras que si es numrico no. Pues bien, si ejecutamos la anterior sentencia, obtenemos el siguiente error: Server: Msg 515, Level 16, State 2, Line 1 Cannot insert the value NULL into column 'idcontacto', table 'pubs.dbo.authors'; column does not allow nulls. INSERT fails. The statement has been terminated. La razn es que no hemos dado valor al atributo idcontacto, que ha sido definido como no nulo. Por lo tanto, rectificamos el Cdigo fuente, para dar un valor al Cdigo fuente 56.

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.36

UNIVERSIDAD NACIONAL DE INGENIERIA

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 condicin donde tabla especifica la tabla donde se encuentran las filas que queremos actualizar, condicin especifica la condicin que se debe cumplir para actualizar las filas, y lo que viene a continuacin de SET especifica la asignacin de los nuevos valores a los atributos. Por lo tanto se actualizarn todas las filas que cumplan la condicin especificada. Si queremos cambiar el nombre al cliente que hemos insertado en el anterior apartado, deberemos escribir el Cdigo fuente : Elevar los precios de los productos en 10% pero solo aquellos que pertenezcan a la Categoria 2 (Bebidas)

UPDATE PRODUCTOS SET PRECIOUNIDAD = PRECIOUNIDAD+(PRECIOUNIDAD*010) WHERE IDCATEGORIA=2


Lo que hacemos con la anterior sentencia es incrementar en 10% el preciounidad de los productos pero solo aquellos de la idcategoria =2(condicin where) cuyo codigo pertenece a la Categoria bebidas, Si ejecutamos la anterior sentencia, obtenemos el resultado: (32 row(s) affected) Lo que quiere decir que la fila ha sido actualizada con xito. Podemos comprobarlo ejecutando el Cdigo fuente

SELECT * FROM Productos WHERE idcategoria = 2

LA SENTENCIA DELETE
El objeto de la sentencia DELETE es el de borrar filas de una tabla. Para poder borrar filas en una tabla se deben cumplir las condiciones de seguridad determinadas por el administrador y deben de cumplirse tambin las reglas de integridad referencial. La sintaxis es la siguiente: DELETE FROM tabla WHERE condicin Donde tabla especifica la tabla sobre la cual queremos borrar las filas, y condicin especifica la condicin que se debe cumplir para que se borren las filas. Si omitimos la
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.37

UNIVERSIDAD NACIONAL DE INGENIERIA

condicin, se borrarn todas las filas de la tabla, es decir, la sentencia que aparece en el Cdigo fuente borra todas las filas de la tabla Pedidos

DELETE FROM PEDIDOS


Por ejemplo, si queremos borrar una fila que hemos creado en la tabla Pedidos, deberemos ejecutar el Cdigo fuente obteniendo el siguiente resultado: (1 row(s) affected)

DELETE FROM PEDIDOS WHERE IDPEDIDO = 11077

lo que viene a decir que la fila se ha borrado. Para comprobarlo, ejecutamos la sentencia que muestra el Cdigo fuente. cuyo resultado es: (0 row(s) affected), lo que quiere decir que la fila no se encuentra en la tabla, es decir, ha sido borrada.

SELECT * FROM PEDIDOS WHERE IDPEDIDO = 11077

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.38

UNIVERSIDAD NACIONAL DE INGENIERIA

SESION 3
Comprensin de la recuperacin de datos. La sentencia SELECT. Filtro de columnas y filas por medio de la sentencia SELECT. Operadores de comparacin (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 conversin de tipo (CONVERT y CAST), funciones de fecha y hora. Uso de las funciones de agregacin. Agrupacin de datos: GROUP BY y HAVING.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.39

UNIVERSIDAD NACIONAL DE INGENIERIA

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 espaol para hacer que los ejemplos que se desarrollen en este manual sean mas ilustrativos y didacticos a continucion presentamos el diseo en el siguiente diagrama A continuacion presentamos los comandos TRANSACT-SQL para poder crearla.

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

CREATE TABLE Clientes(IdCliente varchar(5)INT NOT NULL PRIMARY KEY, NombreCompaa varchar(40),NombreContacto varchar(30), CargoContacto varchar(30),Direccin varchar(60), Ciudad varchar(15), Pas varchar(15), Telfono varchar(24), Fax varchar (24)) CREATE TABLE Categoras (IdCategora int NOT NULL IDENTITY Primary key,NombreCategora varchar(15),Descripcin text)

CREATE TABLE Proveedores(IdProveedor int NOT NULL IDENTITY PRIMARY KEY,NombreCompaa varchar(40),Direccin varchar(60),Ciudad varchar(15),Telfono varchar(24)

CREATE TABLE Productos(IdProducto int not null identity primary key,NombreProducto varchar(35), idproveedor REFERENCES Proveedores(idProveedor)
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.40

UNIVERSIDAD NACIONAL DE INGENIERIA

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
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.41

UNIVERSIDAD NACIONAL DE INGENIERIA

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 Manipulacin de Datos, y que sirve para recuperar registros de una o varias tablas, de una o varias bases de datos. Su sintaxis es la siguiente:

SELECT <atributos> FROM <tablas> [WHERE <condicion>] [GROUP BY <atributos>] [HAVING <condicin>] [ORDER BY <atributos>]

Donde las maysculas representan palabras reservadas, y lo encerrado entre corchetes es opcional, puede ser omitido. Una vez vista la anterior forma de representacin, vamos a detenernos en la sintaxis de la sentencia Select. Se compone de tres partes: SELECT <atributos>: permite hacer una proyeccin de las tablas, es decir, seleccionar los campos que deseamos recuperar de la base de datos, separados por comas. Si se especifica el smbolo *, se obtendrn todos los campos de la tabla. FROM <tablas>: permite especificar la tabla de la cual se desean obtener los datos. Si se especifica ms de una tabla, stas irn separadas por comas. WHERE <condicin>: permite establecer una condicin de recuperacin de las filas de la/s tabla/s. Slo se obtendrn aquellas Registros que verifiquen dicha condicin, que ser opcional. En el caso de que se omita esta parte, se recuperarn todas las filas.
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.42

UNIVERSIDAD NACIONAL DE INGENIERIA

GROUP BY <atributos>: permite establecer una seleccin de campos cuando se utilizan funciones escalares o de conteo (ya se ver ms adelante lo que significa. HAVING <condicin>: establece una condicin para los atributos obtenidos como resultado de la aplicacin de funciones escalares. ORDER BY <atributos>: permite obtener el resultado de la consulta ordenado por los atributos especificados.

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.43

UNIVERSIDAD NACIONAL DE INGENIERIA

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.44

UNIVERSIDAD NACIONAL DE INGENIERIA

5. Mostrar los pedidos entregados entre el 18/6/95 y el 25/12/97 SELECT IDPEDIDO,IDCLIENTE,FECHAPEDIDO,FECHAENTREGA,CARGO FROM PEDIDOS WHERE FECHAPEDIDO BETWEEN 18/06/95 AND 25/12/97 6. Mostrar a los clientes que no tengan numero de fax SELECT NOMBRECOMPAA,DIRECCIN,CIUDAD,PAIS,FAX FROM CLIENTES WHERE FAX IS NULL 7. Mostrar a los clientes que si tengan numero de fax SELECT NOMBRECOMPAA,DIRECCIN,CIUDAD,PAIS,FAX FROM CLIENTES WHERE FAX IS NOT NULL 8. Mostrar los productos cuyo nombre empiezen con las letras Que SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE NOMBREPRODUCTO LIKE Que% 9. Mostrar los productos que empiezen con las letras A,B,C,D SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE NOMBREPRODUCTO LIKE [A-D]% 10. Mostrar los clientes cuyo nombre termine en en la letra S SELECT IDCLIENTE,NOMBRECOMPAIA,DIRECCIN FROM CLIENTES WHERE NOMBRECOMPAIA LIKE %S 11. Mostrar un listado de productos ordenado por precio en forma Ascendente SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS ORDER BY NOMBREPRODUCTO 12. Mostrar un listado de productos ordenado por precio en forma Descendente SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS ORDER BY NOMBREPRODUCTO DESC 13. Mostrar los 3 productos mas Caros SELECT TOP 3 IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC 14. Mostrar los 3 productos mas Baratos SELECT TOP 3 IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.45

UNIVERSIDAD NACIONAL DE INGENIERIA

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 NOMBRECOMPAIA,PAIS FROM CLIENTES WHERE PAIS=ALEMANIA OR PAIS=FRANCIA 17. Mostrar los clientes cuyo pais sea Italia,brasil,francia,irlanda,espaa y suecia SELECT NOMBRECOMPAIA,PAIS FROM CLIENTES WHERE PAIS IN(ITALIA,BRASIL,FRANCIA,IRLANDA,ESPAA,SUECIA) 18. Mostrar los pedidos del cliente cuyo codigo es Anton o bonap y la fecha de los pedidos sea mayor a 11/5/95 SELECT IDPEDIDO,IDCLIENTE,FECHAPEDIDO FROM PEDIDOS WHERE (IDCLIENTE=ANTON OR IDCLIENTE=BONAP) AND (FECHAPEDIDO>11/5/95)

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.46

UNIVERSIDAD NACIONAL DE INGENIERIA

SESION 4

Combinaciones: INNER JOIN, OUTER JOIN, CROSS JOIN, autojoin. Creacin de tablas a partir de consultas. Reunin 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 ms importantes del SQL Transact. Introduccin a los Trigger.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.47

UNIVERSIDAD NACIONAL DE INGENIERIA

CONSULTAS MULTITABLA

En este tema vamos a estudiar las consultas multitabla llamadas as porque estn basadas en ms de una tabla. El SQL de Microsoft Jet 4.x soporta dos grupos de consultas multitabla: la unin de tablas la composicin de tablas

LA UNIN DE TABLAS
Esta operacin se utiliza cuando tenemos dos tablas con las mismas columnas y queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. En este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las mismas que las de la segunda tabla). Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y queremos una lista con todos los libros que tenemos. En este caso las dos tablas tienen las mismas columnas, lo nico que vara son las filas, adems queremos obtener una lista de libros (las columnas de una de las tablas) con las filas que estn tanto en libros nuevos como las que estn en libros antiguos, en este caso utilizaremos este tipo de operacin. Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o tablas lgicas (resultados de una consulta), esto nos permite utilizar la operacin con ms frecuencia ya que pocas veces tenemos en una base de datos tablas idnticas en cuanto a columnas. El resultado es siempre una tabla lgica. Por ejemplo queremos en un slo listado los productos cuyas existencias sean iguales a cero y tambin los productos que aparecen en pedidos del ao 90. En este caso tenemos unos productos en la tabla de productos y los otros en la tabla de pedidos, las tablas no tienen las mismas columnas no se puede hacer una union de ellas pero lo que interesa realmente es el identificador del producto (idfab,idproducto), luego por una parte sacamos los cdigos de los productos con existencias cero (con una consulta), por otra parte los cdigos de los productos que aparecen en pedidos del ao 90 (con otra consulta), y luego unimos estas dos tablas lgicas. El operador que permite realizar esta operacin es el operador UNION.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.48

UNIVERSIDAD NACIONAL DE INGENIERIA

LA COMPOSICIN DE TABLAS

La composicin de tablas consiste en concatenar filas de una tabla con filas de otra. En este caso obtenemos una tabla con las columnas de la primera tabla unidas a las columnas de la segunda tabla, y las filas de la tabla resultante son concatenaciones de filas de la primera tabla con filas de la segunda tabla El ejemplo anterior quedara de la siguiente forma con la composicin:

A diferencia de la unin la composicin permite obtener una fila con datos de las dos tablas, esto es muy til cuando queremos visualizar filas cuyos datos se encuentran en dos tablas. Por ejemplo queremos listar los pedidos con el nombre del representante que ha hecho el pedido, pues los datos del pedido los tenemos en la tabla de pedidos pero el nombre del representante est en la tabla de empleados y adems queremos que aparezcan en la misma lnea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo expuesto a continuacin, hemos seleccionado las filas que nos interesan).

Existen distintos tipos de composicin, aprenderemos a utilizarlos todos y a elegir el tipo ms apropiado a cada caso. Los tipos de composicin de tablas son: El INNER JOIN El LEFT / RIGHT JOIN SELECT * FROM PEDIDOS,CLIENTES WHERE PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.49

UNIVERSIDAD NACIONAL DE INGENIERIA

Combinamos todos los pedidos con todos los clientes pero luego seleccionamos los que cumplan que el cdigo de cliente de la tabla de pedidos sea igual al cdigo de cliente de la tabla de clientes, por lo tanto nos quedamos con los pedidos combinados con los datos del cliente correspondiente. Las columnas que aparecen en la clusula WHERE de nuestra consulta anterior se denominan columnas de emparejamiento ya que permiten emparejar las filas de las dos tablas. Las columnas de emparejamiento no tienen por qu estar incluidas en la lista de seleccin. Normalmente emparejamos tablas que estn relacionadas entre s y una de las columnas de emparejamiento es clave principal, pues en este caso, cuando una de las columnas de emparejamiento tienen un ndice definido es ms eficiente utilizar otro tipo de composicin, el INNER JOIN.

EL INNER JOIN

El INNER JOIN es otro tipo de composicin de tablas, permite emparejar filas de distintas tablas de forma ms eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento est indexada. Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condicin de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condicin, con lo cual se emparejan slo las filas que luego aparecen en el resultado. La sintaxis es la siguiente:

Ejem: SELECT * FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no, nombre de consulta guardada), de las tablas cuyos registros se van a combinar. Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de tabla. col1, col2 son las columnas de emparejamiento. Observar que dentro de la clusula ON los nombres de columna deben ser nombres cualificados (llevan delante el nombre de la tabla y un punto). Las columnas de emparejamiento deben contener la misma clase de datos, las dos de tipo texto, de tipo fecha etc... los campos numricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumrico(IDENTIDAD) y INT puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo INT y FLOAT. Adems las columnas no pueden ser de tipo TEXT ni IMAGE COMP representa cualquier operador de comparacin ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condicin de emparejamiento. Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condicin entre parntesis. Ejemplo: SELECT * FROM PROVEEDORES INNER JOIN PRODUCTOS ON PRODUCTOS
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.50

UNIVERSIDAD NACIONAL DE INGENIERIA

PROVEEDORES.IDPROVEEDOR AND PROVEEDORES.IDPROVEEDOR = PRODUCTOS.IDPROVEEDOR Se pueden combinar ms de dos tablas En este caso hay que sustituir en la sintaxis una tabla por un INNER JOIN completo. Por ejemplo: SELECT * FROM (PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE) INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO = EMPLEADOS.IDEMPLEADO En vez de tabla1 hemos escrito un INNER JOIN completo, tambin podemos escribir: SELECT * FROM CLIENTES INNER JOIN (PEDIDOS INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO = EMPLEADOS.IDEMPLEADO) ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE En este caso hemos sustituido tabla2 por un INNER 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
Empleados Oficinas

Clientes

Productos

Clientes

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.51

UNIVERSIDAD NACIONAL DE INGENIERIA

El LEFT JOIN y RIGHT JOIN son otro tipo de composicin de tablas, tambin denominada composicin externa. Son una extensin del INNER JOIN. INNER JOIN) es una composicion interna ya que todos los valores de las filas del resultado son valores que estn en las tablas que se combinan. Con una composicin interna slo se obtienen las filas que tienen al menos una fila de la otra tabla que cumpla la condicin, veamos un ejemplo: Queremos combinar los empleados con las oficinas para saber la ciudad de la oficina donde trabaja cada empleado, si utilizamos un producto cartesiano tenemos: SELECT EMPLEADOS.*,CIUDAD FROM EMPLEADOS, OFICINAS WHERE EMPLEADOS.OFICINA = OFICINAS.OFICINA Observar que hemos cualificado el nombre de columna oficina ya que ese nombre aparece en las dos tablas de la FROM. Con esta sentencia los empleados que no tienen una oficina asignada (un valor nulo en el campo oficina de la tabla empleados) no aparecen en el resultado ya que la condicin empleados.oficina = oficinas.oficina ser siempre nula para esos empleados.

SI UTILIZAMOS EL INNER JOIN


SELECT EMPLEADOS.*, CIUDAD FROM EMPLEADOS INNER JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA Nos pasa lo mismo, el empleado 110 tiene un valor nulo en el campo oficina y no aparecer en el resultado. Pues en los casos en que queremos que tambin 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 descripcin de la sintaxis es la misma que la del INNER JOIN (ver pgina anterior), lo nico que cambia es la palabra INNER por LEFT (izquierda en ingls).

Esta operacin consiste en aadir al resultado del INNER JOIN las filas de la tabla de la izquierda que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la derecha con valores nulos. Ejemplo: SELECT * FROM EMPLEADOS LEFT JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su oficina, y el empleado 110 que no tiene oficina aparece con sus datos normales y los datos de su oficina a nulos. La sintaxis del RIGHT JOIN es la siguiente:

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.52

UNIVERSIDAD NACIONAL DE INGENIERIA

La sintaxis es la misma que la del INNER JOIN (ver pgina anterior), lo nico que cambia es la palabra INNER por RIGHT (derecha en ingls).

Esta operacin consiste en aadir al resultado del INNER JOIN las filas de la tabla de la derecha que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la izquierda con valores nulos. Ejemplo: SELECT * FROM empleados RIGHT JOIN oficinas ON empleados.oficina = oficinas.oficina Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su oficina, y adems aparece una fila por cada oficina que no est asignada a ningn empleado con los datos del empleado a nulos. Una operacin LEFT JOIN o RIGHT JOIN se puede anidar dentro de una operacin INNER JOIN, pero una operacin 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 clusula FROM. Por ejemplo podemos tener: SELECT * FROM CLIENTES INNER JOIN (EMPLEADOS LEFT JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA) ON CLIENTES.REPCLIE = EMPLEADOS.NUMCLIE Combinamos empleados con oficinas para obtener los datos de la oficina de cada empleado, y luego aadimos los clientes de cada representante, as obtenemos los clientes que tienen un representante asignado y los datos de la oficina del representante asignado. Si hubiramos puesto INNER en vez de LEFT no saldran los clientes que tienen el empleado 110 (porque no tiene oficina y por tanto no aparece en el resultado del LEFT JOIN y por tanto no entrar en el clculo del INNER JOIN con clientes).

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.53

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

UNIVERSIDAD NACIONAL DE INGENIERIA

CON WHERE
SELECT PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CATEG ORIAS.NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAIA,STOC K FROM PRODUCTOS,CATEGORAS,PROVEEDORES WHERE PRODUCTOS.IDCATEGORIA=CATEGORIAS.IDCATEGORIA AND PRODUCTOS.IDPROVEEDOR=PROVEEDORES.IDPROVEEDOR

CON INNER JOIN


SELECT PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CATEG ORIAS.NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAIA,STOC K 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.NOMBRECOMP AIA,EMPLEADOS.APELLIDOS+ + EMPLEADOS.NOMBRE,PEDIDOS.CARGO FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.54

UNIVERSIDAD NACIONAL DE INGENIERIA

USO DE SELECT CON CAMPOS CALCULADOS

En los capitulos anteriores aprendimos a usar FUNCIONES y utilizar comandos SET ahora vamos a desarrollar ejemplos de consultas SELECT para obtener campos calculados Ejemplo :En la tabla Empleados tenemos la fecha de nacimiento de los empleados y la Fecha de contratacion pero no tenemos un campo que nos muestre explicitamente la Edad ni el Tiempo de Servicio para ello desarrollaremos los siguiente SELECT NOMBRE, APELLIDOS, FECHANACIMIENTO, DATEDIFF(YEAR,FECHANACIMIENTO,GETDATE()) AS EDAD, FECHACONTRATACION, DATEDIFF(YEAR,FECHACONTRATACION,GETDATE()) AS [TIEMPO SERVICIO] FROM EMPLEADOS 1. Mostrar los dias Transcurridos entre la fecha de Pedido y la Fecha de entrega de todos los Pedidos entregados al pais de Alemania SELECT IDPEDIDO, FECHAPEDIDO, FECHAENTREGA, DATEDIFF(DAY,FECHAPEDIDO,FECHAENTREGA) AS [DIAS TRANSCURRIDOS], FROM PEDIDOS WHERE PAS=ALEMANIA 2. Mostrar el incremento de los precios de los productos en un 10% SELECT IDPRODUCTO, NOMBREPRODUCTO, PRECIOUNIDAD, PRECIOUNIDAD*.010 AS INCREMENTO, PRECIOUNIDAD+(PRECIOUNIDAD)*.010 AS [PRECIO INCREMENTADO] FROM PRODUCTOS 3. Mostrar el total de cada detalle de pedido SELECT [DETALLES DE PEDIDOS].CANTIDAD, PRODUCTOS.NOMBREPRODUCTO, [DETALLES DE PEDIDOS].PRECIOUNIDAD, [DETALLES DE PEDIDOS].CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.55

UNIVERSIDAD NACIONAL DE INGENIERIA

FUNCIONES ESCALARES PARA SELECT

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

FUNCION SUM
Realiza una suma de toda una columna para todas las filas accedidas mediante una consulta SQL.

SELECT SUM (CARGO) FROM PEDIDOS


La anterior consulta obtiene la suma del precio para todas las filas de la tabla pedido, ya que no hemos especificado ninguna condicin en la clusula WHERE. Si ahora queremos obtener la suma total de todos los pedidos realizados por el cliente cuyo cdigo es "ANTON", debemos realizar la misma consulta, pero especificando una condicin para obtener nicamente las filas cuyo cod_cliente es "ANTON":

SELECT SUM(CARGO) FROM PEDIDOS WHERE IDCLIENTE = "ANTON"

FUNCION COUNT
Cuenta todas las filas de las tablas accedidas mediante una consulta SQL. Por ejemplo, si tenemos una tabla cliente, con todos los clientes de una empresa de servicios, con los atributos idCliente, nombre, apellidos, direccin, y queremos saber todos los clientes que tenemos, deberemos realizar un count, para obtener todas el nmero de filas de la tabla ejecutamos el Cdigo fuente

SELECT COUNT(IDCLIENTE) FROM CLIENTES


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

SELECT COUNT(*) FROM CLIENTES


Si ahora queremos saber el nmero de clientes que viven en Madrid, deberemos realizar un conteo de todas las filas con la condicin de que el atributo ciudad sea Madrid.

SELECT COUNT(*) FROM CLIENTES WHERE CIUDAD = "MADRID"


Y si queremos saber cuantos Productos tenemos, cuyo precio es mayor de 20, deberemos realizar lo mismo, pero especificando esta condicin en la clusula WHERE. Al resultado de la bsqueda le llamaremos Caros.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.56

UNIVERSIDAD NACIONAL DE INGENIERIA

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

FUNCION AVG
Realiza una media aritmtica de los atributos para todas las filas accedidas mediante la consulta SQL. Si por ejemplo tenemos una tabla de materiales, con los atributos cod_material, descripcin, precio y cantidad _ pedida, y queremos saber la cantidad media pedida de todos los materiales, deberemos realizar una media aritmtica, teniendo en cuenta todas las filas de la tabla:

SELECT AVG(CANTIDAD _ PEDIDA) FROM MATERIAL


La anterior sentencia, internamente, realiza primero una suma de todos los valores, y a continuacin la divide por el nmero total de filas accedidas, es decir, realiza la media aritmtica. Volviendo a nuestra cultural base de datos SUPERMERCADOSNEPTUNO, si queremos saber la media del precio de los ttulos que tenemos disponibles, deberemos ejecutar el Cdigo fuente

SELECT AVG(PRECIOUNIDAD) AS PROMEDIO FROM PRODUCTOS

FUNCION MAX
Obtiene el mximo valor del atributo especificado, de entre todas las filas seleccionadas mediante la sentencia SQL. Supngase, por ejemplo, que tenemos la tabla de materiales descrita anteriormente. Si queremos saber el material mas caro, deberemos realizar un SELECT con la clusula Max, que obtenga el mayor valor para el atributo precio de todas las filas. Para nuestro ejemplo, si queremos saber cual es el libro ms caro, ejecutaremos el Cdigo fuente

SELECT MAX(PRECIOUNIDAD) AS CARO FROM PRODUCTOS

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

SELECT MIN(PRECIOUNIDAD) AS BARATO FROM PRODUCTOS

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.57

UNIVERSIDAD NACIONAL DE INGENIERIA

LA CLAUSULA COMPUTE

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

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.58

UNIVERSIDAD NACIONAL DE INGENIERIA

LA CLAUSULA GROUP BY

Se pueden obtener subtotales con la clusula GROUP BY. Una consulta con una clusula GROUP BY se denomina consulta agrupada ya que agrupa los datos de la tabla origen y produce una nica fila resumen por cada grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de agrupacin. Ejemplos 1. Mostrar el total de clientes que tiene la empresa en cada pais SELECT PAS,COUNT(IDCLIENTE) AS [TOTAL CLIENTES] FROM CLIENTES GROUP BY PAS ORDER BY COUNT(IDCLIENTE) DESC

2. Mostrar el precio del producto mas caro de cada categoria SELECT NOMBRECATEGORA,MAX(PRECIOUNIDAD) AS [Mas Caros] FROM CATEGORAS INNER JOIN PRODUCTOS ON CATEGORAS.IDCATEGORA=PRODUCTOS.IDCATEGORA GROUP BY NOMBRECATEGORA

3. Mostrar el Monto total de cada Pedido SELECT IDPEDIDO,SUM(CANTIDAD*PRECIOUNIDAD) AS [TOTAL PEDIDO] FROM [DETALLES DE PEDIDOS] GROUP BY IDPEDIDO

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.59

UNIVERSIDAD NACIONAL DE INGENIERIA

4. Mostrar el total de compras por cliente en el ao 1995 SELECT NOMBRECOMPAA, YEAR(FECHAPEDIDO) AS AO, SUM(CANTIDAD*PRECIOUNIDAD) AS [TOTAL COMPRAS] FROM CLIENTES INNER JOIN PEDIDOS ON CLIENTES.IDCLIENTE=PEDIDOS.IDCLIENTE INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE YEAR(FECHAPEDIDO)=1995 GROUP BY NOMBRECOMPAA,YEAR(FECHAPEDIDO)

5. Mostrar los tres mejores empleados tomando en cuenta la cantidad de pedidos despachados SELECT TOP 3 NOMBRE+' '+APELLIDOS AS EMPLEADO, COUNT(IDPEDIDO) AS [TOTAL DESPACHADOS] FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO GROUP BY NOMBRE+' '+APELLIDOS ORDER BY COUNT(IDPEDIDO) DESC

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.60

UNIVERSIDAD NACIONAL DE INGENIERIA

7. Mostrar el total de ventas del MES actual del AO Actual SELECT MONTH(FECHAPEDIDO)AS MES,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE MONTH(FECHAPEDIDO)=MONTH(GETDATE()) AND YEAR(FECHAPEDIDO)=YEAR(GETDATE()) GROUP BY MONTH(FECHAPEDIDO) 8. Mostrar el total de ventas del AO Actual SELECT YEAR(FECHAPEDIDO) AS AO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE YEAR(FECHAPEDIDO)= YEAR(GETDATE()) GROUP BY YEAR(FECHAPEDIDO) 8. Mostrar los tres productos menos vendidos SELECT TOP 3 NOMBREPRODUCTO,SUM(CANTIDAD) AS [TOTAL VENDIDOS] FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO GROUP BY NOMBREPRODUCTO ORDER BY SUM(CANTIDAD)

9. Mostrar el total de ventas en cada pais SELECT PASDESTINATARIO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO GROUP BY PASDESTINATARIO ORDER BY SUM(CANTIDAD*CANTIDAD)DESC

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.61

UNIVERSIDAD NACIONAL DE INGENIERIA

USO DE SUBCONSULTAS

Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que llamaremos consulta principal. Se puede encontrar en la lista de seleccin, en la clusula WHERE o en la clusula HAVING de la consulta principal. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre parntesis, no puede contener la clusula ORDER BY, ni puede ser la UNION de varias sentencias SELECT, adems tiene algunas restricciones en cuanto a nmero de columnas segn el lugar donde aparece en la consulta principal. Estas restricciones las iremos describiendo en cada caso. Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal. Se aconseja no utilizar campos calculados en las subconsultas, ralentizan la consulta. Las consultas que utilizan subconsultas suelen ser ms fciles de interpretar por el usuario

Ejemplo:usando SUPERMERCADOSNEPTUNO Mostrar los productos que tengan un precio mayor al precio promedio de todos los productos SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE PRECIOUNIDAD>(SELECT AVG(PRECIOUNIDAD) FROM PRODUCTOS)

TEST DE COMPARACION ANY


Tenemos el test ANY (algn, alguno en ingls) y el test ALL (todos en ingls). La subconsulta debe devolver una nica columna sino se produce un error. Se evala la comparacin con cada valor devuelto por la subconsulta. Si alguna de las comparaciones individuales produce el resultado verdadero, el test ANY devuelve el resultado verdadero. Si la subconsulta no devuelve ningn valor, el test any devuelve falso. si el test de comparacin es falso para todos los valores de la columna, ANY devuelve falso. Si el test de comparacin no es verdadero para ningn valor de la columna, y es nulo para al menos alguno de los valores, ANY devuelve Nulo.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.62

UNIVERSIDAD NACIONAL DE INGENIERIA

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

EL TEST DE COMPARACION ALL.


La subconsulta debe devolver una nica columna sino se produce un error. Se evala la comparacin con cada valor devuelto por la subconsulta. Si todas las comparaciones individuales, producen un resultado verdadero, el test devuelve el valor verdadero. Si la subconsulta no devuelve ningn valor el test ALL devuelve el valor verdadero. (Ojo con esto!) Si el test de comparacin es falso para algn valor de la columna, el resultado es falso. Si el test de comparacin no es falso para ningn valor de la columna, pero es nulo para alguno de esos valores, el test ALL devuelve valor nulo.

Ejemplo con BDVENTAS: SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ALL (SELECT SUM(CUOTA) FROM EMPLEADOS GROUP BY OFICINA) En este caso se listan las oficinas cuyo objetivo sea superior A TODAS las sumas

TEST DE PERTENENCIA A CONJUNTO (IN)


Examina si el valor de la expresin es uno de los valores incluidos en la lista de valores producida por la subconsulta. La subconsulta debe generar una nica columna y las filas que sean. Si la subconsulta no produce ninguna fila, el test da falso.

Tiene la siguiente sintaxis: Ejemplo con BDVENTAS SELECT NUMEMP, NOMBRE, OFICINA FROM EMPLEADOS WHERE OFICINA IN (SELECT OFICINA FROM OFICINAS WHERE REGION = 'ESTE') Con la subconsulta se obtiene la lista de los nmeros de oficina del este y la consulta principal obtiene los empleados cuyo nmero de oficina sea uno de los nmeros de oficina del este.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.63

UNIVERSIDAD NACIONAL DE INGENIERIA

TEST DE EXISTENCIA EXISTS


Por lo tanto lista los empleados de las oficinas del este

Examina si la subconsulta produce alguna fila de resultados. Si la subconsulta contiene filas, el test adopta el valor verdadero, si la subconsulta no contiene ninguna fila, el test toma el valor falso, nunca puede tomar el valor nulo Con este test la subconsulta puede tener varias columnas, no importa ya que el test se fija no en los valores devueltos sino en si hay o no fila en la tabla resultado de la subconsulta. Cuando se utiliza el test de existencia en la mayora de los casos habr que utilizar una referencia externa. Si no se utiliza una referencia externa la subconsulta devuelta siempre ser la misma para todas las filas de la consulta principal y en este caso se seleccionan todas las filas de la consulta principal (si la subconsulta genera filas) o ninguna (si la subconsulta no devuelve ninguna fila)

Ejemplo con BDVENTAS SELECT numemp, nombre, oficina FROM empleados WHERE EXISTS (SELECT * FROM oficinas WHERE region = 'este' AND empleados.oficina = oficinas.oficina) Este ejemplo obtiene lo mismo que el ejemplo del test IN.Observa que delante de EXISTS no va ningn nombre de columna. En la subconsulta se pueden poner las columnas que queramos en la lista de seleccin (hemos utilizado el *).Hemos aadido una condicin adicional al WHERE, la de la referencia externa para que la oficina que se compare sea la oficina del empleado

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

RESUMEN DEL TEMA


Una subconsulta es una sentencia SELECT que aparece en la lista de seleccin, o en las clusulas WHERE o HAVING de otra sentencia SELECT. 1. La subconsulta se ejecuta por cada fila de la consulta principal. 2. Dentro de una consulta se puede utilizar una columna del origen de la consulta principal, una referencia externa. 3. Aunque se puedan anidar subconsultas no es aconsejado ms de un nivel de anidamiento. 4. La subconsulta sufre una serie de restricciones segn el lugar donde se encuentre. 5. Las condiciones asociadas a las subconsultas son las siguientes: Profesor Henry Chavez Viera SQL Server 2005 Express Pag.64

UNIVERSIDAD NACIONAL DE INGENIERIA 6. el test de comparacin 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 NOMBRECATEGORA, NOMBREPRODUCTO, PRECIOUNIDAD FROM PRODUCTOS INNER JOIN CATEGORAS ON PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA WHERE PRECIOUNIDAD IN (SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS WHERE PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA)

2. Mostrar la lista de los 3 mejores vendedores en base a su total de pedidos despachados SELECT TOP 3 NOMBRE,APELLIDOS,COUNT(PEDIDOS.IDPEDIDO)AS TOTALPEDIDOS FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO WHERE EMPLEADOS.IDEMPLEADO IN (SELECT PEDIDOS.IDEMPLEADO FROM PEDIDOS GROUP BY PEDIDOS.IDEMPLEADO) GROUP BY NOMBRE,APELLIDOS ORDER BY COUNT(PEDIDOS.IDPEDIDO) DESC

3. Mostrar los productos que se hayan vendido con un descuento igual al 25% SELECT * FROM PRODUCTOS WHERE PRECIOUNIDAD ANY(SELECT PRECIOUNIDAD FROM [DETALLES DE PEDIDOS] WHERE DESCUENTO=0.25) 4. Mostrar a los clientes que por lo menos hayan realizado un pedido SELECT CLIENTES.NOMBRECOMPAA,CLIENTES.TELFONO FROM CLIENTES

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.65

UNIVERSIDAD NACIONAL DE INGENIERIA

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 compaas y los contactos de todos los clientes que han realizado un pedido en el segundo trimestre de 1995 SELECT DISTINCT NOMBRECONTACTO,NOMBRECOMPAIA,CARGOCONTACTO,TELEFONO FROM CLIENTES WHERE IDCLIENTE IN(SELECT DISTINCT IDCLIENTE FROM PEDIDOS WHERE FECHAPEDIDO<07/01/95) 8. Recupera el codigo del producto y la cantidad y la cantidad pedida de la tabla Detalles de pedidos,extrayendo el nombre del producto de la tabla Productos SELECT DISTINCT [DETALLES DE PEDIDOS].IDPRODUCTO, [DETALLES DE PEDIDOS].CANTIDAD, (SELECT PRODUCTOS.NOMBREPRODUCTO FROM PRODUCTOS WHERE PRODUCTOS.IDPRODUCTO=[DETALLES DE PEDIDOS].IDPRODUCTO) AS ELPRODUCTO FROM [DETALLES DE PEDIDOS] WHERE [DETALLES DE PEDIDOS].CANTIDAD=15 ORDER BY [DETALLES DE PEDIDOS].IDPRODUCTO 9. Recupera numeros de vuelos y capacidades de aquellos vuelos con destino a madrid y plazas libres SELECT NUMVUELO,PLAZAS FROM VUELOS WHERE ORIGEN=MADRID AND EXISTS(SELECT T1.NUMVUELO FROM VUELOS AS T1 WHERE T1.PLAZASLIBRES>0 AND T1.NUMVUELO=VUELOS.NUMVUELO)

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.66

UNIVERSIDAD NACIONAL DE INGENIERIA

FUNCIONES DE SQL SERVER

FUNCIONES DE TIPO FECHA


Estas funciones escalares realizan una operacin sobre un valor de fecha y hora de entrada, y devuelven un valor de cadena, numrico o de fecha y hora.

DATEADD

Devuelve un valor datetime nuevo que se basa en la suma de un intervalo a la fecha especificada. Sintaxis DATEADD ( partedeFecha , numero, Fecha ) Parte de fecha Year quarter Month dayofyear Day Week Hour minute second millisecond Abreviaturas yy, yyyy qq, q mm, m dy, y dd, d wk, ww hh mi, n ss, s ms

Mostrar la fecha de pago de los pedidos incrementando en 21 dias la fecha de pedido SELECT DATEADD(day, 21, FechaPedido) AS FechaPago FROM pedidos

DATEDIFF

Devuelve el nmero de dias,meses o aos que han transcurrido entre dos fechas especificadas. Sintaxis DATEDIFF ( parteFecha , Fechainicial , fechafinal ) SELECT NOMBRE,APELLIDOS, DATEDIFF(YEAR,FECHANACIMIENTO,GETDATE()) AS EDAD FROM EMPLEADOS

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.67

UNIVERSIDAD NACIONAL DE INGENIERIA

DATENAME
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha especificada. Sintaxis DATENAME (parteFecha , fecha ) En este ejemplo se extrae el nombre del mes de la fecha devuelta por GETDATE. SELECT IDPEDIDO,FECHAPEDIDO,FECHAENVIO,FECHAENTREGA,DATENAME(M ONTH, FECHAPEDIDO) AS MESPEDIDO FROM PEDIDOS El siguiente es el conjunto de resultados:

DATEPART
Devuelve un entero que representa la parte de la fecha especificada de la fecha indicada. Sintaxis DATEPART ( parteFecha , fecha ) La funcin GETDATE devuelve la fecha actual; sin embargo, la fecha completa no es siempre la informacin que se necesita para la comparacin (a menudo, slo se compara una parte de la fecha). En este ejemplo se muestra la salida de GETDATE y la de DATEPART. SELECT GETDATE() AS 'FechaActual' GO El siguiente es el conjunto de resultados: FechaActual --------------------------Feb 18 1998 11:46PM En este ejemplo se supone que la fecha es el 29 de mayo. SELECT DATEPART(month, GETDATE()) GO El siguiente es el conjunto de resultados: ----------5

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.68

UNIVERSIDAD NACIONAL DE INGENIERIA

DAY

Devuelve un entero que representa la parte del da de la fecha especificada. Sintaxis DAY ( fecha ) En este ejemplo se devuelve el nmero del da de la fecha 12/03/1998. SELECT DAY('03/12/1998') AS 'NumeroDia' GO El siguiente es el conjunto de resultados: NumeroDia -----------12

MONTH
Devuelve un entero que representa el mes de una fecha especificada. Sintaxis MONTH ( Fecha ) Este ejemplo devuelve el nmero del mes de la fecha 03/12/1998. SELECT "NumeroMes" = MONTH('03/12/1998') GO El siguiente es el conjunto de resultados: NumeroMes -----------3

YEAR
Devuelve un entero que representa la parte de ao de la fecha especificada. Sintaxis YEAR ( Fecha ) Este ejemplo devuelve el nmero del ao de la fecha 03/12/1998. SELECT "NumeroAo" = YEAR('03/12/1998') GO El siguiente es el conjunto de resultados: NumeroAo -----------1998

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.69

UNIVERSIDAD NACIONAL DE INGENIERIA

UTILIZAR FUNCIONES MATEMTICAS

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

ROUND
Devuelve una expresin numrica, redondeada a la longitud o precisin especificada. Sintaxis ROUND ( numero , longitud ) Ejemplos ROUND(748.58, -1) ROUND(748.58, -2) ROUND(748.58, -3) ROUND(123.4545, 2) ROUND(123.45, -2) Resultado 750.00 700.00 1000.00 123.4500 100.00

CEILING
Devuelve un numero entero ms pequeo mayor o igual que la expresin numrica dada. Sintaxis CEILING ( expressionNumerica ) Este ejemplo muestra valores numricos positivos, negativos y cero con la funcin CEILING. SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0) El siguiente es el conjunto de resultados: --------- --------- ------------------------124.00 -123.00 0.00

FLOOR
Devuelve el numero entero ms grande menor o igual que la expresin numrica dada. Sintaxis FLOOR ( expresionNumerica ) Este ejemplo muestra valores numricos positivos, negativos y valores de moneda con la funcin FLOOR. SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45) El resultado es la parte entera del valor calculado en el tipo de datos correspondiente a expresionNumerica ----------------- ----------123 -124 123.0000
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.70

UNIVERSIDAD NACIONAL DE INGENIERIA

POWER

Devuelve el valor de la expresin 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 raz cuadrada de la expresin especificada. Sintaxis SQRT ( expressionNumerica ) DECLARE @myvalue float SET @myvalue = 16 SELECT SQRT(@myvalue) Devuelve 4

UTILIZAR FUNCIONES DE TEXTOS


Estas funciones escalares realizan una operacin sobre una cadena de entrada y devuelven un valor de cadena o un valor numrico.

UPPER
Convierte de minsculas a maysculas Sintaxis UPPER (expressionTexto) Ejemplos En este ejemplo se utiliza la funcion UPPER para devolver el primer apellido del empleado concatenado con el nombre. SELECT UPPER(NOMBRE) + ', ' + APELLIDOS AS NAME FROM EMPLEADOS ORDER BY APELLIDOS

LOWER
Convierte de maysculas a minusculas Sintaxis LOWER ( expressionTexto ) Muestra los nombres de los clientes en minusculas SELECT LOWER(NOMBRECOMPAIA) FROM CLIENTES

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.71

UNIVERSIDAD NACIONAL DE INGENIERIA

LEFT
Extrae caracteres empezando por el lado izquierdo de la cadena especificada como expresion de texto Sintaxis LEFT ( expressionTexto,numeroCaracteres ) Este ejemplo devuelve los cinco caracteres situados ms a la izquierda de cada nombre del producto SELECT LEFT(NOMBREPRODUCTO, 5) FROM PRODUCTOS

RIGHT
Extrae caracteres empezando por el lado derecho de la cadena de caracteres Sintaxis RIGHT ( expressionTexto , numeroCaracteres) Este ejemplo devuelve los cinco caracteres situados ms a la derecha de cada nombre del producto. SELECT RIGHT(NOMBREPRODUCTO, 5) FROM PRODUCTOS

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.72

UNIVERSIDAD NACIONAL DE INGENIERIA

SUBSTRING

Devuelve una parte de una expresin de caracteres Sintaxis SUBSTRING ( expressionTexto , Posicion inicial , numeroCaracteres) En el ejemplo siguiente se muestra cmo obtener parte de una cadena de caracteres. En la tabla Empleados, esta consulta obtiene los apellidos en una columna y slo la primera inicial en la segunda columna. SELECT nombre, SUBSTRING(Apellidos, 1, 1) FROM authors ORDER BY Apellidos

REPLACE
Reemplaza por una tercera expresin todas las apariciones de la segunda expresin de cadena proporcionada en la primera expresin de cadena. Sintaxis REPLACE ( 'expressionTexto1' , 'expressionTexto2' , expressionTexto3' ) En este ejemplo se reemplaza la cadena "cde" de "abcdefghi" por "xxx". SELECT REPLACE('abcdefghicde','cde','xxx')

PATINDEX
Devuelve la posicin inicial de la primera aparicin de un patrn en la expresin especificada o ceros si el patrn no se encuentra, con todos los tipos de datos de texto y caracteres. Sintaxis PATINDEX ( '%pattern%' , expression ) En este ejemplo se busca la posicin en que comienza el patrn "secas" en una fila especfica de la columna NombreProducto de la tabla Productos SELECT PATINDEX('%secas%', nombreProducto) FROM Productos WHERE idProducto = 7 El siguiente es el conjunto de resultados: ----------7

STUFF
Elimina el nmero de caracteres especificado e inserta otro conjunto de caracteres en un punto de inicio indicado. Sintaxis STUFF (expressionTexto , PosInicial , longitud , expressiontexto )

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.73

UNIVERSIDAD NACIONAL DE INGENIERIA

En el ejemplo siguiente se obtiene una cadena de caracteres creada al eliminar tres caracteres de la primera cadena (abcdef) a partir de la posicin 2 (la letra b) e insertar la segunda cadena en el punto de eliminacin. SELECT STUFF('abcdef', 2, 3, 'ijklmn') El siguiente es el conjunto de resultados: --------aijklmnef

STR
Devuelve datos de tipo carcter obtenidos a partir de datos numricos. Sintaxis STR ( expressionNumerica ) En el ejemplo siguiente se convierte una expresin formada por cinco dgitos y un separador decimal en una cadena de caracteres de seis posiciones. La parte fraccionaria del nmero se redondea a un lugar decimal. SELECT STR(123.45, 6, 1) El siguiente es el conjunto de resultados: -----123.5

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

CHAR
Una funcin de cadena que convierte un cdigo ASCII int en un carcter. Sintaxis CHAR ( expresionNumerica ) Este ejemplo utiliza CHAR(13) para imprimir la informacin de nombre, direccin y ciudad en lneas separadas, cuando los resultados se devuelven en texto.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.74

UNIVERSIDAD NACIONAL DE INGENIERIA

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 cdigo ASCII del carcter ms a la izquierda de una expresin de caracteres. Sintaxis ASCII ( expressionTexto ) SELECT ASCII(A) Devuelve 65

REPLICATE
Repite una expresin de caracteres un nmero especificado de veces. Sintaxis REPLICATE ( expressionTexto , numeroVeces ) En este ejemplo se duplica el nombre de cada Empleado dos veces. SELECT REPLICATE(Nombre, 2) FROM Empleados ORDER BY nombre

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.75

UNIVERSIDAD NACIONAL DE INGENIERIA

FUNCIONES DE CONVERSION

CAST Y CONVERT
Convierten una expresin de un tipo de datos en otro. CAST y CONVERT proporcionan funciones similares. Este ejemplo concatena expresiones mediante la funcin de conversin de tipos de datos CAST. SELECT 'EL PRECIO ES ' + CAST(PRECIOUNIDAD AS VARCHAR(12)) FROM PRODUCTOS WHERE PRECIOUNIDAD > 10.00 El siguiente es el conjunto de resultados: --------------------------The precio es 19.99 The precio es 11.95 Este ejemplo convierte una columna de tipo int (la columna idPedido) en una columna de tipo char(20) para poder utilizarla en una clusula LIKE. Mostrar los pedidos cuyo el mes de la fechaPedido sea igual Agosto y el numero de pedido empieze en los numeros 12 SELECT IDPEDIDO,FECHAPEDIDO FROM PEDIDOS WHERE CAST(IDPEDIDO AS CHAR(20)) LIKE '12%' AND MONTH(FECHAPEDIDO) = 8 GO La function GetDate() devuelve la Fecha y la hora Actual en este formato

Si desea obtener solo la fecha en formato Dia Mes Ao sin incluir la hora actual haga lo siguiente SELECT CONVERT(VARCHAR(8),GETDATE(),3)

SELECT CONVERT(VARCHAR(10),GETDATE(),103)

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.76

UNIVERSIDAD NACIONAL DE INGENIERIA

COMANDOS SET

El lenguaje de programacin Transact-SQL ofrece varias instrucciones SET que alteran el tratamiento de informacin de SQL SERVER.. Las instrucciones SET se dividen en las siguientes categoras: Categora Fecha y hora Bloqueo Varias Ejecucin de consultas Valores de SQL-92 Estadsticas Transacciones Altera la configuracin de la sesin actual para Tratar datos de fecha y hora. Tratar el bloqueo en Microsoft SQL Server Diversa funcionalidad de SQL Server. Ejecutar y procesar consultas. Utilizar la configuracin predeterminada de SQL92. Presentar informacin estadstica. Tratar transacciones de SQL Server.

SET DATEFIRST
Establece como primer da de la semana un nmero del 1 al 7. Sintaxis SET DATEFIRST { number | @number_var } Es un entero que indica el primer da de la semana y puede tener uno de los valores siguientes.
Valor 1 2 3 4 5 6 7 (predeterminado, Ingls EE.UU.) Primer da de la semana: Lunes Martes Mircoles Jueves Viernes Sbado Domingo

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.77

UNIVERSIDAD NACIONAL DE INGENIERIA

SET DATEFORMAT

Determina el orden de las partes de la fecha (mes/da/ao) para escribir datos de tipo datetime o smalldatetime. Sintaxis SET DATEFORMAT { format | @format_var } Este valor slo se utiliza en la interpretacin de las cadenas de caracteres cuando se convierten en valores de fecha. No tiene ningn efecto en la presentacin de los valores de fecha. En este ejemplo se usan distintos formatos de fecha para tratar cadenas de fecha con formatos diferentes. /*Establecemos el formato en Mes Dia Ao SET DATEFORMAT MDY GO /*DECLARAMOS UNA VARIABLE LLAMADA @DATEVAR DE TIPO FECHA DECLARE @DATEVAR DATETIME /*ASIGNAMOS EL VALOR A LA VARIABLE SET @DATEVAR = '12/31/98' /*MOSTRAMOS EL VALOR DE LA VARIABLE SELECT @DATEVAR GO /* Establecemos el formato en Ao Dia mes y hacemos lo mismo que el Ejemplo Anterior SET DATEFORMAT DMY GO DECLARE @DATEVAR DATETIME SET @DATEVAR = '31/12/98' SELECT @DATEVAR GO

SET IDENTITY_INSERT
Permite insertar valores explcitos en la columna identidad(Autonumerica) de una tabla.Por ejemplo la tabla PRODUCTOS tiene el campo idproducto como clave primaria y es una columna con la propiedad identidad establecida en si Ejemplos En este ejemplo se crea una tabla con una columna de identidad y se muestra cmo se puede usar la opcin SET IDENTITY_INSERT para llenar un hueco en los valores de identidad causado por una instruccin DELETE.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.78

UNIVERSIDAD NACIONAL DE INGENIERIA

1. Tenemos la siguiente tabla

2. Eliminamos la categoria de codigo 7 DELETE FROM CATEGORAS WHERE IDCATEGORA = 7 GO SELECT * FROM CATEGORAS GO

Ahora si queremos insertar un nuevo registro con el codigo numero 7 que fue eliminado no sera posible porque SQL SERVER nos enviara el sgte error Servidor: mensaje 544, nivel 16, estado 1, lnea 1 No se puede insertar un valor explcito en la columna de identidad de la tabla 'Categoras' cuando IDENTITY_INSERT es OFF Para solucionar este problema usaremos la siguiente instruccin SET IDENTITY_INSERT CATEGORAS ON GO INSERT INTO CATEGORAS(IDCATEGORA, NOMBRECATEGORA) VALUES(7, 'FRUTAS/VERDURAS') GO /*EXAMINE LOS RESULTADOS*/ SELECT * FROM CATEGORIAS

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.79

UNIVERSIDAD NACIONAL DE INGENIERIA

SET NOCOUNT

Hace que deje de devolverse como parte de los resultados el mensaje que indica el nmero de filas afectado por una instruccin Transact-SQL. Sintaxis SET NOCOUNT { ON | OFF } Cuando SET NOCOUNT es ON, no se devuelve el nmero de filas afectado por una instruccin Transact-SQL. Cuando SET NOCOUNT es OFF, s se devuelve ese nmero. La funcin @@ROWCOUNT se actualiza incluso cuando SET NOCOUNT es ON. Este ejemplo en el Analizador de consultas de SQLse impide que aparezca el mensaje con el nmero de filas afectadas. GO SELECT IDPEDIDO FROM PEDIDOS GO SET NOCOUNT ON GO SELECT IDPEDIDO FROM PEDIDOS GO /*PARA REESTABLECERLO DESACTIVE EL COMANDO EN OFF*/ SET NOCOUNT OFF GO

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

A continuacin se establece 4 en ROWCOUNT y se actualizan todas las filas con anticipos de 10 $ o ms. SET ROWCOUNT 4 GO UPDATE PEDIDOS SET CARGO = 7.5 WHERE CARGO >= 10 GO

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.80

UNIVERSIDAD NACIONAL DE INGENIERIA

USO DE CREATE FUNCTION


Microsoft agreg nuevas caractersticas a su producto SQL SERVER 2000, y lo ms interesante para los programadores del SQL es la posibilidad de hacer funciones definidas por el usuario. La adicin de funciones al lenguaje del SQL solucionara los problemas de reutilizacin del cdigo y dara mayor flexibilidad al programar las consultas de SQL.

TIPOS DE FUNCIONES
El servidor 2000 del SQL utiliza estos tipos de funciones: 1. Las funciones escalares, 2. Tabla en linea Los tres tipos de funciones aceptan parmetros de cualquier tipo. Las funciones escalares devuelven un solo valor, tabla en linea y Multisentencias devuelben un tipo de dato tabla.

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

CREATE FUNCTION NombreFuncion ( [@nombreParameterparameterN]) RETURNS tipoValorRetorno [AS] BEGIN <instrucciones> RETURN expresionEscalar END EJEMPLO: 1. Escriba esto en el analizador de consultas CREATE FUNCTION SUMA (@VALOR1 INT,@VALOR2 INT) RETURNS INT AS BEGIN RETURN(@VALOR1+@VALOR2) END

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.81

UNIVERSIDAD NACIONAL DE INGENIERIA

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 LNEA


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

CREATE FUNCTION ClientesPorPais(@Pais varchar(25) ) RETURNS TABLE AS RETURN (SELECT * FROM Clientes WHERE Pas = @pais)
Creamos la funcion y luego invocaremos a la funcion de esta forma: SELECT * FROM DBO.CLIENTESPORPAIS('ALEMANIA')

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.82

UNIVERSIDAD NACIONAL DE INGENIERIA

ALTER FUNCTION

Modifica una funcin existente definida por el usuario, creada anteriormente por la ejecucin de la instruccin CREATE FUNCTION, sin cambiar los permisos y sin que afecte a ninguna otra funcin, procedimiento almacenado o desencadenador dependientes. 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)

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.83

UNIVERSIDAD NACIONAL DE INGENIERIA

CREATE FUNCTION PEDIDOSAO(@AO AS INTEGER) RETURNS TABLE AS RETURN SELECT IDPEDIDO, FECHAPEDIDO, NOMBRECOMPAA, NOMBRE, APELLIDOS, PEDIDOS.CARGO FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO WHERE YEAR(FECHAPEDIDO)=@AO

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

ELIMINAR UNA FUNCION


Para eliminar una funcion ejecute el comando DROP FUNCTION Ejemplo: DROP FUNCTION DBO.PEDIDOSAO

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.84

UNIVERSIDAD NACIONAL DE INGENIERIA

CREACION DE VISTAS CON CREATE VIEW

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

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

VENTAJAS DE LAS VISTAS


Una ventaja del uso de las vistas es que stas siempre ofrecen los datos actualizados. La instruccin SELECT que define una vista slo se ejecuta cuando se accede a la vista, por tanto, todos los cambios de la tabla subyacente se reflejan en la vista. Otra ventaja de usar vistas es que una vista puede tener un nivel diferente de seguridad del que posea la tabla subyacente. La consulta que define la vista se ejecuta con el nivel de seguridad que posea el usuario que crea la vista. De esta manera, se puede crear una vista que enmascare los datos que no se quieran mostrar a ciertas clases de usuarios.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.85

UNIVERSIDAD NACIONAL DE INGENIERIA

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 ms potentes, porque permiten almacenar funciones y procedimientos compuestos por varias instrucciones, introducir saltos, bucles, etc. Tambin se pueden compilar procedimiento escritos en lenguaje C, para ampliar su potencia modularmente. Por ejemplo, podemos crear un procedimiento para recuperar el nombre de un Cliente, cuyo cdigo se pasa por parmetro. CREATE PROCEDURE ObtenerNombre @IDCLIENTE varchar(11) AS SELECT NOMBRECOMPAA FROM CLIENTES WHERE IDCLIENTE = @IDCLIENTE Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al que se le pasa un parmetro, llamado @idcliente, de tipo varchar(11), que realiza una consulta para obtener el nombre de la tabla clientes, cuyo cdigo coincida con el parmetro. De esta forma, si queremos obtener el nombre del cliente cuyo cdigo sea 'anton', deberemos ejecutar el procedimiento pasndole como argumento este valor:

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.86

UNIVERSIDAD NACIONAL DE INGENIERIA

Las llamadas a procedimientos almacenados se pueden realizar de las siguientes formas: Pasando los argumentos en el mismo orden que en el que se han declarado. Exec ObtenerNombre 'anton' esta sentencia produce la siguiente la salida:

Pasando los argumentos nombrados. En este caso no hace falta que los parmetros vayan en el mismo orden. OBTENERNOMBRE @AU_ID = 'ANTON' Ejemplo 2:

CREATE PROCEDURE LISTARPEDIDOS ( @IDCLIENTE VARCHAR(7), @FECHAINICIAL SMALLDATETIME, @FECHAFINAL SMALLDATETIME ) AS SELECT PEDIDOS.IDPEDIDO,CLIENTES.NOMBRECOMPAA,EMPLEADOS.NOMBRE + EMPLEADOS.APELLIDOS AS EMPLEADO,PEDIDOS.CARGO,PEDIDOS.FECHAPEDIDO, PEDIDOS.FECHAENVIO,PEDIDOS.FECHAENTREGA FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO WHERE PEDIDOS.IDCLIENTE=@IDCLIENTE AND FECHAPEDIDO BETWEEN @FECHAINICIAL AND @FECHAFINAL Ejecutando el procedimiento almacenado EXEC LISTARPEDIDOS 'ANTON','12/05/95','22/12/96'

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.87

UNIVERSIDAD NACIONAL DE INGENIERIA

PARMETROS POR REFERENCIA

Si ejecutamos las anteriores sentencias, obtendremos el resultado directamente en la ventana que tengamos abierta en SQL Server. Pero Que pasa si queremos obtener un parmetro de salida, como resultado de la ejecucin del procedimiento?. La solucin para este caso es utilizar la palabra reservada OUTPUT para los argumentos de salida. Si por ejemplo, queremos obtener el nmero de clientes y el nmero de productos que tenemos en la base de datos, crearemos el procedimiento almacenado que muestra el Cdigo fuente. CREATE PROCEDURE num_clientes_productos @clientes int OUTPUT, @Productos int OUTPUT AS SELECT * FROM clientes SELECT @clientes = @@ROWCOUNT SELECT * FROM productos SELECT @productos = @@ROWCOUNT RETURN (0) Vamos a estudiar el anterior ejemplo. Bsicamente es similar al anterior. Detrs de la palabra reservada PROCEDURE damos el nombre del procedimiento almacenado, y a continuacin proporcionamos los parmetros, junto con su tipo (que en este caso es entero), y diremos sin stos son de salida, en cuyo caso especificamos la palabra reservada OUTPUT a continuacin. Tras la palabra reservada AS se codifica el cuerpo del procedimiento. Primero contamos todas las filas de la tabla clientes, realizando un SELECT * FROM clientes. A continuacin devolvemos en el parmetro @clientes el valor obtenido, utilizando @@ROWCOUNT. Acto seguido se realiza lo mismo para la tabla Productos. Ntese como la forma de asignar un valor a un atributo es mediante una sentencia SELECT, igualando el parmetro al valor. La funcin @@ROWCOUNT devuelve el nmero de filas que se han seleccionado. Es equivalente a la sentencia que aparece en el Cdigo fuente SELECT COUNT(*) FROM Productos Se podra sustituir por Cdigo fuente CREATE PROCEDURE num_clientes_productos @clientes int OUTPUT, @clientes int OUTPUT AS SELECT @clientes = (SELECT COUNT(*) FROM clientes) 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
Profesor Henry Chavez Viera SQL Server 2005 Express Pag.88

UNIVERSIDAD NACIONAL DE INGENIERIA

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

EXECUTE
Ejecuta una funcin definida por el usuario que devuelve valores escalares, un procedimiento del sistema, un procedimiento almacenado definido por el usuario o un procedimiento almacenado extendido. Admite tambin la ejecucin de una cadena de caracteres. Ejemplo: DECLARE @TABLE VARCHAR(25) SET @TABLE='CLIENTES' EXEC ('SELECT * FROM ' + @TABLE)

MODIFICAR UN PROCEDIMIENTO ALMACENADO


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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.89

UNIVERSIDAD NACIONAL DE INGENIERIA

ELIMINAR UN PROCEDIMIENTO ALMACENADO

Si queremos borrar un procedimiento almacenado, ejecutaremos la sentencia DROP PROCEDURE, seguido del nombre del procedimiento. Por ejemplo, si queremos borrar el procedimiento almacenado, creado en el anterior ejemplo, escribiremos el Cdigo fuente DROP PROCEDURE num_clientes_clientes

EJEMPLOS DE PROCEDIMIENTOS ALMACENADOS


Utilizar EXECUTE con DEFAULT El ejemplo siguiente crea un procedimiento almacenado con un valor predeterminado para su parametro. Cuando se ejecuta el procedimiento,el valor predeterminado se insertan como parmetro si no se pasa ningn valor en la llamada o si se especifica el valor predeterminado. CREATE PROCEDURE LISTARCLIENTES(@PAIS VARCHAR(25) ='ARGENTINA') AS SELECT IDCLIENTE,NOMBRECOMPAA,DIRECCIN,PAS FROM CLIENTES WHERE PAS=@PAIS Observe las distintas formas en las que se puede utilizar la palabra clave DEFAULT Sino se especifica el valor del parametro se asume entonces el valor por defecto es decir se tomara entonces el valor ARGENTINA EXEC LISTARCLIENTES DEFAULT

CREACION DE TRIGGERS
Los disparadores de procedimiento, ms comnmente conocidos como triggers, son una especie de procedimientos almacenados, a diferencia que se ejecutan cuando ocurre un evento sobre alguna tabla. Entendemos por evento, cualquier accin del tipo: INSERCIN BORRADO ACTUALIZACIN

La sintaxis de la sentencia de creacin de triggers es la siguiente: CREATE TRIGGER nombre ON tabla FOR accion AS codigo Donde accin especifica el evento que debe ocurrir para que se dispare el trigger, y que puede ser:

UPDATE: actualizacin.
SQL Server 2005 Express Pag.90

Profesor Henry Chavez Viera

UNIVERSIDAD NACIONAL DE INGENIERIA

INSERT: insercin. DELETE: borrado.

Por ejemplo, si queremos crear un trigger llamado modificacin_cliente, sobre la tabla Authors, que muestre un mensaje cada vez que se actualiza una fila de la tabla, deberemos escribir el Cdigo fuente CREATE TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Han actualizado la tabla Pedidos" Para comprobar el funcionamiento de este trigger, podemos actualizar cualquier fila de la tabla de clientes, por ejemplo con la sentencia que aparece en el Cdigo fuente UPDATE clientes SET nombre = 'Antonio Moreno' WHERE idcliente = 'anton' Con esto conseguimos dos cosas, actualizar el nombre del cliente cuyo cdigo es el especificado a Miguel, y obtener el mensaje que se muestra como ejecucin del trigger de actualizacin. Sin embargo, los triggers en SQL Server tienen una serie de limitaciones: 1. No se puede disparar un trigger dentro de otro trigger, ya que dara lugar a un bucle infinito 2. Por esta razn, un trigger no puede ejecutar instrucciones DDL (lenguaje de definicin de datos) 3. No se pueden ejecutar sentencias como SELECT INTO o de creacin de dispositivos dentro de un trigger

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

DROP TRIGGER modificacion_cliente

MODIFICAR UN TRIGGER

Para modificar un trigger, deberemos ejecutar la sentencia ALTER TRIGGER

Por ejemplo, si queremos modificar el trigger anteriormente creado, ejecutaremos el Cdigo fuente

ALTER TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Los registros de la tabla Pedidos han sido actualizados"
Como ya se ha comentado, los triggers o desencadenadores son una especie de procedimientos almacenados, que se ejecutan cuando ocurre una accin dentro de la base de Profesor Henry Chavez Viera SQL Server 2005 Express Pag.91

UNIVERSIDAD NACIONAL DE INGENIERIA datos. As, si por ejemplo se ejecuta una insercin, una actualizacin, o un borrado de una tabla, se ejecutaran las sentencias definidas para el trigger en concreto de esa tabla especfica. Recordamos cual es su sintaxis:

CREATE TRIGGER nombre ON tabla FOR [DELETE | INSERT | UPDATE] AS Sentencias


Las palabras reservadas DELETE, INSERT y UPDATE corresponden a cada una de las acciones para las cuales se puede definir un desencadenador dentro de la tabla especificada. El bloque de sentencias permite prcticamente cualquier tipo de ellas dentro del lenguaje TSQL, pero con ciertas limitaciones. Por ejemplo, no se podr utilizar la sentencia select, ya que un trigger no puede devolver datos al usuario, sino que simplemente se ejecuta para cambiar o comprobar los datos que se van a insertar, actualizar o borrar.

LAS TABLAS DELETED E INSERTED


Dentro de la definicin de un trigger, podemos hacer referencia a un par de tablas lgicas, cuya estructura es similar a la tabla donde se esta ejecutando el trigger; es decir, es una copia de la tabla en la cual se van a insertar o borrar los datos, y que contiene, precisamente, los datos que van a ser aadidos o borrados. La utilidad de estas dos tablas es la de realizar comprobaciones entre los datos antiguos y los nuevos.As, por ejemplo, si queremos recuperar los datos de la tabla que estamos borrando, dentro del trigger,se deber ejecutar el siguiente cdigo:

SELECT * FROM DELETED

TIPOS DE DESENCADENADORES
SQL-Server permite la definicin de varios tipos de triggers, entre los cuales cabe destacar los siguientes:

DESENCADENADORES MLTIPLES:
Para una misma tabla, se pueden definir distintos triggers para la misma accin, es decir, si definimos un trigger para insert, y resulta que dicha tabla ya tena definido un trigger para esa misma accin, se ejecutarn ambos triggers cuando ocurra dicho evento sobre la tabla.

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

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.92

UNIVERSIDAD NACIONAL DE INGENIERIA 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.IDCATEGORA FROM CATEGORAS C WHERE C.NOMBRECATEGORA LIKE 'CONDIMENTO%') SET @EXISTE=ISNULL(( SELECT IDPRODUCTO FROM PRODUCTOS WHERE

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.93

UNIVERSIDAD NACIONAL DE INGENIERIA IDCATEGORA=@COD AND IDPRODUCTO= (SELECT IDPRODUCTO FROM INSERTED) ),0) IF @EXISTE<>0 BEGIN PRINT 'NO SE PUEDE VENDER UN CONDIMENTO ESTA SUSPENDIDO' ROLLBACK END END

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.94

UNIVERSIDAD NACIONAL DE INGENIERIA

SESION 5
SQL Server Management Studio Express Administracin y Consulta) Optimizar Base de Datos Configuracin de Servicios Seguridad en Sql Server 2005 Express Edition (Herramienta de

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.95

MICROSOFT SQL SERVER MANAGEMENT STUDIO EXPRESS HERRAMIENTAS DE ADMINISTRACION Y CONSULTA


Microsoft SQL Server Management Studio Express (SSMSE) es una herramienta grfica de administracin gratuita y fcil de usar para SQL Server 2005 Express Edition y SQL Server 2005 Express Edition with Advanced Services.

UNIVERSIDAD NACIONAL DE INGENIERIA

1. SQL Server Express Edition es una edicin gratuita de MS SQL Server, con la que podr utilizar bases de datos SQL sin ningn coste adicional. Entre sus caractersticas 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. Herramienta de administracin y consulta SQL Server Management Studio Express. Utiliza un procesador y hasta 1GB de memoria. Tamao de bases de datos limitado a 4GB.

o o o

MICROSOFT SQL SERVER 2005 EXPRESS EDITION WITH ADVANCED SERVICES


Microsoft SQL Server 2005 Express Edition with Advanced Services (SQL Server Express) es una nueva versin gratuita y fcil de usar de SQL Server Express que incluye una nueva herramienta grfica y eficaces caractersticas para la generacin de informes y bsquedas de texto avanzadas. SQL Server Express proporciona herramientas de administracin eficaces y confiables y caractersticas completas, proteccin de datos y un rendimiento rpido. Es ideal para clientes de aplicaciones incrustadas, aplicaciones Web ligeras y almacenes de datos locales. SQL Server Express with Advanced Services tiene todas las caractersticas de SQL Server 2005 Express Edition y, adems, puede: Administrar fcilmente SQL Server Express con una nueva herramienta grfica de administracin fcil 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.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.96

UNIVERSIDAD NACIONAL DE INGENIERIA

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 ms rpido (se recomienda 1 GHz o ms rpido). 512 MB de memoria RAM como mnimo (se recomienda 1 GB o ms). 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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.97

Cmo realizar una copia de seguridad de una base de datos


1. Expanda Bases de datos y, en funcin 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 botn secundario en la base de datos, seleccione Tareas y haga clic en Copia de seguridad. Aparece el cuadro de dilogo Copia de seguridad de base de datos. 3. En el cuadro de lista Base de datos, verifique el nombre de la base de datos. Tambin 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 recuperacin (FULL, BULK_LOGGED o SIMPLE). 5. En el cuadro de lista Tipo de copia de seguridad, seleccione Completa. Tenga en cuenta que despus 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 Descripcin, escriba una descripcin del conjunto de copia de seguridad. 4. Especifique cundo caducar el conjunto de copia de seguridad y se podr sobrescribir sin omitir explcitamente la comprobacin 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, seleccinelo y haga clic en Quitar. Para ver el contenido de un destino de copia de seguridad, seleccinelo y haga clic en Contenido. 6. Para ver o seleccionar las opciones avanzadas, haga clic en Opciones del panel Seleccionar una pgina 7. Seleccione una opcin 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 opcin, haga clic en Anexar al conjunto de copia de

UNIVERSIDAD NACIONAL DE INGENIERIA

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.98

UNIVERSIDAD NACIONAL DE INGENIERIA 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 operacin de copia de seguridad compruebe la fecha y la hora en que caducan el conjunto de medios y el conjunto de copia de seguridad. Tambin puede escribir un nombre en el cuadro de texto Nombre del conjunto de medios. Si no especifica ningn 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 opcin, 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 descripcin del conjunto de medios. 8. Opcionalmente, en la seccin Confiabilidad, seleccione: 1. Comprobar copia de seguridad al finalizar. 2. Realizar suma de comprobacin antes de escribir en los medios y, si lo desea, Continuar despus de un error de suma de comprobacin. 9. Si va a realizar copias de seguridad en una unidad de cinta (segn se haya especificado en la seccin Destino de la pgina General), la opcin Descargar la cinta despus de realizar la copia de seguridad est activa. Al hacer clic en esta opcin se activa la opcin 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 botn secundario en la base de datos, seleccione Tareas y haga clic en Copia de seguridad. Aparece el cuadro de dilogo Copia de seguridad de base de datos. 3. En el cuadro de lista Base de datos, verifique el nombre de la base de datos. Tambin puede seleccionar otra base de datos en la lista. Puede realizar una copia de seguridad diferencial para cualquier modelo de recuperacin (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.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.99

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


1. Expanda Bases de datos. En funcin de la base de datos, seleccione una base de datos de usuario o expanda Bases de datos del sistema y, a continuacin, seleccione una base de datos del sistema. 2. Haga clic con el botn secundario en la base de datos, seleccione Tareas y, a continuacin, haga clic en Restaurar. 3. Haga clic en Base de datos, con lo que se abrir el cuadro de dilogo Restaurar base de datos. 4. En la pgina General, el nombre de la base de datos en restauracin 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 ms reciente posible) o seleccionar una fecha y hora determinados haciendo clic en el botn Examinar, que abrir el cuadro de dilogo Restauracin a un momento dado. 6. Para especificar el origen y la ubicacin 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 botn Examinar, que abrir el cuadro de dilogo 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 Ubicacin de la copia de seguridad, haga clic en Agregar. Tras agregar los dispositivos que desee al cuadro de lista Ubicacin de la copia de seguridad, haga clic en Aceptar para volver a la pgina General. 7. En la cuadrcula 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

UNIVERSIDAD NACIONAL DE INGENIERIA

Para adjuntar una base de datos


1. En el Explorador de objetos de SQL Server Management Studio, conctese a una instancia de SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft y, a continuacin, expndala. 2. Haga clic con el botn secundario en Bases de datos, seleccione Tareas y, a continuacin, haga clic en Adjuntar. 3. En el cuadro de dilogo Adjuntar bases de datos, haga clic en Agregar para especificar la base de datos que se va a adjuntar y en el cuadro de dilogo Buscar archivos de base de datos, seleccione la unidad de disco en

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.100

UNIVERSIDAD NACIONAL DE INGENIERIA 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, tambin 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 dilogo 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.

Cmo separar una base de datos


1. En el Explorador de objetos de SQL Server Management Studio, conctese a la instancia del SQL Server Database Engine (Motor de base de datos de SQL Server) y expndala. 2. Expanda Bases de datos y seleccione el nombre de la base de datos de usuarios que desee separar.La separacin 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 botn secundario en el nombre de la base de datos y seleccione Propiedades. En el panel Seleccionar una pgina, haga clic en Opciones. En el panel Otras opciones, desplcese hasta las opciones de Estado. Seleccione la opcin Restringir acceso y, en la lista desplegable, seleccione el modo nico (Single). Haga clic en Aceptar. Aparecer un cuadro de mensaje informndole de que esta accin cerrar todas las conexiones a la base de datos. Para continuar, haga clic en Aceptar. 3. Haga clic con el botn secundario en el nombre de la base de datos, seleccione Tareas y, a continuacin, haga clic en Separar. Aparecer el cuadro de dilogo Separar base de datos. 4. En la cuadrcula 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 verificacin Quitar conexiones. 7. Cuando est listo para separar la base de datos, haga clic en Aceptar.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.101

UNIVERSIDAD NACIONAL DE INGENIERIA

Reducir bases de datos

En SQL Server 2005, pueden reducirse todos los archivos de una base de datos para quitar las pginas 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 reduccin 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; tambin se puede configurar la base de datos para que se reduzca automticamente a intervalos determinados.

Para Reducir bases de datos


1. Expanda Bases de datos y, a continuacin, haga clic con el botn secundario en la base de datos que desee reducir. 2. Seleccione Tareas y Reducir y haga clic en Base de datos. 3. Tambin puede seleccionar la casilla de verificacin Reorganizar archivos antes de liberar espacio no utilizado. Si se selecciona, debe especificarse un valor en Cantidad mxima de espacio libre en los archivos despus de la reduccin. 4. Especifique el porcentaje mximo de espacio libre que desee dejar en los archivos de la base de datos despus de reducirla. Los valores permitidos oscilan entre 0 y 99. Esta opcin slo est disponible cuando se selecciona Reorganizar archivos antes de liberar espacio no utilizado. 5. Haga clic en Aceptar.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.102

UNIVERSIDAD NACIONAL DE INGENIERIA

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 informacin 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 conexin 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 nmero de versin. 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 instalacin o mediante la herramienta de configuracin de superficie. Se puede administrar utilizando el Administrador de configuracin de SQL Server. De manera predeterminada, el servicio Explorador de SQL Server se inicia automticamente:

Cuando se actualiza una instalacin. Cuando se instala simultneamente con una instancia de SQL Server 2000. Cuando se instala en un clster Cuando se instala una instancia con nombre de SQL Server 2005 Enterprise Edition, Standard Edition o Workgroup Edition.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.103

UNIVERSIDAD NACIONAL DE INGENIERIA

USUARIOS DE SQL SERVER 2005


En el momento de configurar la conexin con SQL Server 2005, indicamos que comenzaramos la sesin con una cuenta del sistema local. Lo cual quiere decir, que utilizamos la misma cuenta de inicio de sesin de Windows para conectarnos a nuestro servidor de datos. A lo largo de este curso, utilizaremos este modo de autenticacin, no obstante, vamos a explicar como crear cuentas de usuario de SQL Server, puesto que se trata del modo de trabajo ms seguro. Para crear cuentas de usuario, tenemos habilitada la carpeta Security, que podemos encontrar desplegando el rbol de navegacin del explorador de objetos. Dentro de esta carpeta, se almacena la carpeta Logins, la cual muestra en la pestaa principal, las cuentas de usuario que se crean automticamente por defecto al instalar SQL Server y las creadas por nosotros. Para crear una nueva cuenta, pulsamos el botn derecho del ratn sobre la carpeta inicios de sesion, y seleccionamos Nuevo.

En la siguiente ventana comienza el proceso de creacin de la cuenta. En el primer paso (General) indicamos: El nombre o Login de la cuenta. El tipo de autenticacin para esta cuenta, pudiendo elegir entre autenticacin windows o autenticacin SQL Server. Si seleccionamos autenticacin Windows, mediante el boton "Search" podemos buscar entre

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.104

UNIVERSIDAD NACIONAL DE INGENIERIA 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 contrasea. Vemos que tenemos la posibilidad de forzar las polticas de contraseas, las cuales se aseguran que las contraseas cumplan unas determinadas condiciones de formato, de caducidad, y la posibilidad de que el usuario cambie su contrasea en el momento de iniciar por primera vez su sesin. Estas polticas se encuentras deshabilitadas en la versin 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 pestaa, indicamos las reglas de acceso sobre el servidor, pudiendo elegir entre permisos para administracin de procesos, creacin de bases de datos, administracin de seguridad (crear nuevos usuarios...) etc.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.105

UNIVERSIDAD NACIONAL DE INGENIERIA

A continuacin, le indicamos los permisos especficos 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.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.106

UNIVERSIDAD NACIONAL DE INGENIERIA

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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.107

UNIVERSIDAD NACIONAL DE INGENIERIA

Una vez configuradas todas las propiedades de esta cuenta pulsamos OK para almacenar todos los cambios. Ahora podramos pulsar sobre el botn para conectarnos al servidor e introducir el login y contrasea de la cuenta SQL Server que hemos creado. Y comprobar los permisos de cuenta que hemos indicado.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.108

UNIVERSIDAD NACIONAL DE INGENIERIA

SESION 6
Tipos de seguridad. Modos de seguridad en SQL Server. Creacin de cuentas SQL Server. Usuarios de bases de datos. Roles de servidor y roles de bases de datos. Funciones y asignaciones Permisos.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.109

UNIVERSIDAD NACIONAL DE INGENIERIA

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 ms que eso. Es esencial primero implementar la seguridad dentro de la organizacin, 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 compaa a nuestros competidores, o alguien accediendo a la informacin privada de otros. Lo primero que se tiene que hacer es un plan de seguridad, el cual identifique que usuarios en la organizacin 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 travs de 2 niveles de autenticacin: 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 vlido 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 despus de adicionar nuevos logins a SQL Server.

USER:
Una cuenta de usuario vlida dentro de una base de datos es requerida para acceder a esta base de datos. Las cuentas de usuario son especficas 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 conexin, SQL Server verifica el nombre de login suministrado, para asegurar que el login esta autorizado para acceder a SQL Server. Este proceso de verificacin es llamado autenticacin. SQL Server soporta 2 modos de autenticacin:

MODO DE AUTENTICACIN DE WINDOWS:


Con la autenticacin de Windows, no necesitamos especificar un nombre y contrasea 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

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.110

UNIVERSIDAD NACIONAL DE INGENIERIA

MODO MIXTO

Este modo de autenticacin permite a los usuarios conectarse usando autenticacin de Windows o autenticacin de SQL Server. Nuestro DBA primero tiene que crear una cuenta y contrasea de login vlida en SQL Server. Estas cuentas no estn relacionadas a las cuentas de Microsoft Windows NT/2000/2003. Con este modo de autenticacin, tenemos que suministrar el login y contrasea de SQL Server cuando nos conectamos a SQL Server. Si no especificamos un nombre de login y contrasea de SQL Server o solicitamos Autenticacin de Windows, nosotros estaremos autenticndonos usando Autenticacin de Windows. Un punto a tener en cuenta es que cualquier modo que se configure en nuestro SQL Server, podemos siempre utilizar la Autenticacin de Windows La Autenticacin de Windows es el modo de seguridad recomendado, debido a que es ms seguro y no tenemos que enviar nombres de login y contraseas sobre la red. Nosotros deberamos 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 autenticacin SQL Server. sp_grantlogin: Permite a una cuenta o grupo de usuarios de Windows NT/2000/2003 conectarse a SQL Server usando Autenticacin 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 contrasea del login de SQL Server. sp_helplogins: Proporciona informacin 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 informacin acerca de los usuarios y roles de Microsoft en la actual base de datos.

Ahora vamos a hablar acerca de cmo 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 sntesis 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 Profesor Henry Chavez Viera SQL Server 2005 Express Pag.111

UNIVERSIDAD NACIONAL DE INGENIERIA Existen 3 tipos de roles en SQL Server: Roles de Servidor Roles de Base de Datos Roles de Aplicacin

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 configuracin 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, tambin leer los registros de error y cambio de contraseas. 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 informacin 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 Profesor Henry Chavez Viera SQL Server 2005 Express Pag.112

UNIVERSIDAD NACIONAL DE INGENIERIA 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 definicin 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 algn dato de cualquier tabla en la base de datos. db_denydatawriter: No puede modificar algn 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 informacin acerca de los roles en la base de datos actual. sp_helprolemember: Retorna informacin 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 APLICACIN
Los roles de aplicacin simplifican el trabajo de los administradores de base de datos, debido a que ellos no estaran preocupados en manejar los permisos a nivel de usuario individual. Todo lo que necesitan hacer es crear un rol de aplicacin y asignar permisos a este rol. La aplicacin que est conectndose a la base de datos activa el rol de aplicacin y hereda los permisos

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.113

UNIVERSIDAD NACIONAL DE INGENIERIA asociados con este rol. Alguna de las caractersticas de los roles de aplicacin son los siguientes: No existen roles de aplicacin pre-definidos. Los roles de aplicacin no contienen miembros. Los roles de aplicacin necesitan ser activados en tiempo de ejecucin, por la aplicacin, usando una contrasea.

Los roles de aplicacin sobrescriben los permisos estndar. Por ejemplo, despus de activar el rol de aplicacin, la aplicacin 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 aplicacin. Los roles de aplicacin son especficos a la base de datos. Despus de activar un rol de aplicacin en una base de datos, si la aplicacin quiere ejecutar una transaccin a travs de base de datos, la otra base de datos tienen que tener habilitado una cuenta de usuario invitado. Aqu estn los procedimientos almacenados que son requeridos para manejar los roles de aplicacin: sp_addrole: Adiciona un rol de aplicacin en la base de datos actual. sp_approlepassword: Cambia la contrasea de un rol de aplicacin en la base de datos actual. sp_dropapprole: Elimina un rol de aplicacin de la base de datos actual. sp_setapprole: Activa los permisos asociados con un rol de aplicacin en la base de datos actual.

PERMISOS
Luego de estudiar los diferentes tipos de roles, vamos a conocer acerca de los permisos de concesin y revocacin hacia y desde los usuarios de base de datos y los roles de base de datos y roles de aplicacin. Los siguientes comandos de T-SQL son usados para manejar los permisos en el nivel de usuario y rol GRANT: Concede los permisos especficos (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 tambin manejar permisos a nivel de columna. La seguridad es un punto crtico 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 organizacin.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.114

UNIVERSIDAD NACIONAL DE INGENIERIA

SESION 7
Comandos T-SQL para la optimizacin de datos Acceso a Datos va T-SQL Manejo de Schemas Linked Servers (Servidores Enlazados Configuracin Administracin) Configuracin de Alertas Operadores y Revisin de Sucesos

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.115

UNIVERSIDAD NACIONAL DE INGENIERIA

SCHEMAS
SQL Server al igual que los DBMSs 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 podra 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 estn implcitamente relacionados. Al crear un usuario se crea automticamente un esquema y un esquema no existe sin su usuario asociado. Este diseo es simple pero tiene algunas desventajas - Limita la independencia que deberan tener los desarrolladores para trabajar libremente con los objetos de un esquema y los DBAs 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 diseo cambia, independizndose 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 diseo tiene algunas ventajas sobre el anterior 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 poda implicar un cambio en las aplicaciones que accedan a tablas de dicho esquema Cuando se tenan varios usuarios en una base de datos, al tener cada uno su propio esquema Profesor Henry Chavez Viera SQL Server 2005 Express Pag.116

UNIVERSIDAD NACIONAL DE INGENIERIA se corra 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 transaccin CREATE SCHEMA tambin puede crear tablas y vistas dentro del esquema nuevo, y establecer la concesin, denegacin o revocacin (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 instruccin. Esta instruccin debe ejecutarse como un lote independiente. Los objetos creados por la instruccin CREATE SCHEMA se crean dentro
En el ejemplo siguiente se crea el esquema

se crean en una sola instruccin

Sprockets, que es propiedad de Annik y contiene la tabla NineProngs. La instruccin concede el permiso SELECT a Mandar y deniega el permiso SELECT a Prasanna. Tenga en cuenta que Sprockets y NineProngs

del esquema que se est creando

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 configuracin con servidores vinculados permite a SQL Server ejecutar comandos en orgenes 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 orgenes de datos heterogneos en toda la organizacin. Capacidad de tratar diferentes orgenes de datos de manera similar.

Se puede hacer referencia a las tablas remotas utilizando el nombre de servidor vinculado de alguna de estas formas:

Un servidor vinculado es un servidor virtual que se ha definido en SQL Server 2005 con toda la informacin 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 definicin del servidor vinculado contiene toda la informacin necesaria para buscar el origen de datos OLE DB. Los inicios de sesin locales de SQL Server se asignan a inicios de sesin del servidor vinculado utilizando sp_addlinkedsrvlogin.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.117

UNIVERSIDAD NACIONAL DE INGENIERIA

SP_ADDLINKEDSERVER
Crea un servidor vinculado. Un servidor vinculado permite obtener acceso a consultas heterogneas distribuidas en orgenes de datos OLE DB. Despus 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', @datasrc = 'MyServer' GO @provider = 'MSDAORA',

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.118

UNIVERSIDAD NACIONAL DE INGENIERIA

JET EN UNA HOJA DE CLCULO EXCEL

USAR EL PROVEEDOR MICROSOFT OLE DB PARA

Para crear una definicin de servidor vinculado mediante el proveedor Microsoft

OLE DB para Jet para obtener acceso a una hoja de clculo Excel, primero debe crearse un intervalo con nombre en Excel que especifique las columnas y filas de la hoja de clculo 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', GO

'c:\MyData\DistExcl.xls', NULL, 'Excel 5.0'

Para obtener acceso a los datos de una hoja de clculo Excel, asocie un nombre a

servidor vinculado que se cre anteriormente. SELECT * GO FROM ExcelSource...SalesData

un intervalo de celdas. La consulta siguiente se puede utilizar para obtener acceso al intervalo denominado SalesData especificado como una tabla utilizando el

USAR EL PROVEEDOR MICROSOFT OLE DB PARA JET


En el siguiente ejemplo se crea un servidor vinculado llamado SEATTLE Mktg. base de datos de ejemplo Northwind, y que la base de datos Northwind reside En este ejemplo se da por supuesto que se han instalado Microsoft Access y la

en C:\Msoffice\Access\Samples.

EXEC sp_addlinkedserver @server = 'SEATTLE Mktg', @provider = 'Microsoft.Jet.OLEDB.4.0', @srvproduct = 'OLE DB Provider for Jet', GO

@datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb'

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.119

UNIVERSIDAD NACIONAL DE INGENIERIA

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). Adems, con el modelo de recuperacin completa o por medio de registros de operaciones masivas, realiza la copia de seguridad del registro de transacciones (BACKUP LOG). El siguiente ejemplo muestra cmo crear una copia de seguridad completa de la seguridad existente y crear un nuevo conjunto de medios. A continuacin, en el base de datos mediante WITH FORMAT para sobrescribir cualquier copia de ejemplo se realiza una copia de seguridad del registro de transacciones. En una peridicas. Para este ejemplo, la base de datos de ejemplo AdventureWorks debe

situacin real, deber realizar una serie de copias de seguridad de registros configurarse para utilizar el modelo de recuperacin completa. USE master; ALTER DATABASE AdventureWorks SET RECOVERY FULL; GO

server\MSSQL.1\MSSQL\BACKUP\AdventureWorksFullRM.bak'; WITH FORMAT; GO

BACKUP DATABASE AdventureWorks TO DISK = 'C:\Program Files\Microsoft SQL

Server\MSSQL.1\MSSQL\BACKUP\AdventureWorksFullRM.bak'; GO

BACKUP LOG AdventureWorks TO DISK = 'C:\Program Files\Microsoft SQL

REALIZAR UNA RESTAURACIN DE BASE DE DATOS COMPLETA


El objetivo de una restauracin completa de la base de datos es restaurar la base de datos completa. Durante el proceso de restauracin, la base de datos completa se encuentra sin conexin. Antes de que ninguna parte de la base de datos tenga conexin, 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 transaccin sin confirmar. En el modelo de recuperacin simple, no se puede restaurar la base de datos a un momento concreto de una copia de seguridad especfica.

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.120

UNIVERSIDAD NACIONAL DE INGENIERIA

RESTAURAR UNA BASE DE DATOS COMPLETA

Una restauracin completa de base de datos con el modelo de recuperacin simple implica una o dos instrucciones RESTORE, en funcin de si se debe restaurar o no una copia de seguridad diferencial de la base de datos. Si slo usa copias de seguridad completas de la base de datos, restaure slo la copia de seguridad ms reciente. Si tambin usa una copia de seguridad diferencial de la base de datos, restaure la copia de seguridad completa ms reciente de la base de datos sin recuperar la base de datos y, a continuacin, restaure la copia de seguridad diferencial ms reciente de la base de datos y recupere la base de datos. Ejemplo En el siguiente ejemplo se muestra primero cmo usar la instruccin BACKUP para crear una copia de seguridad completa y diferencial de la base de datos AdventureWorks. A continuacin, se restauran estas copias de seguridad una despus de la otra. En el ejemplo se comienza con una instruccin ALTER DATABASE que establece el modelo de recuperacin como SIMPLE. USE master;

/*Estableciendo el modo de restauracion */ GO

ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE; /*Crear un backup completo*/

'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*/

BACKUP DATABASE AdventureWorks TO DISK =

'Z:\SQLServerBackups\AdventureWorks.bak' WITH FILE=1, NORECOVERY; GO

RESTORE DATABASE AdventureWorks FROM DISK =

/*Restaurar Diferencial*/

RECOVERY; GO

'Z:\SQLServerBackups\AdventureWorks.bak' WITH FILE=2,

RESTORE DATABASE AdventureWorks FROM DISK =

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.121

UNIVERSIDAD NACIONAL DE INGENIERIA

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.

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 comn 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 -UUsuarioPContrasena.

BCP VS BULK INSERT

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 instruccin la implementamos de la siguiente manera: BULK INSERT Tabla FROM 'c:\ArchivoPlano.txt' with(FIELDTERMINATOR = ',',ROWTERMINATOR = '\n' )

El ROWTERMINATOR es utilizado para especificar la insercin 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 lnea. (Nota: La n especificada debe ser obligatoriamente escrita en minscula). Exiten muchos ms parmetros para especficarle a la Instruccin BULK INSERT, esto solo es el comienzo, sabemos que ustedes pueden encontrar el Final.

Al especficar el with en la intruccin anterior, el parmetro FIELDVALIDATOR es utilizado para especficar 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.

SELECT a.* FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;', 'SELECT GroupName, Name, DepartmentID FROM AdventureWorks.HumanResources.Department ORDER BY GroupName, Name') AS a;

Profesor Henry Chavez Viera

SQL Server 2005 Express

Pag.122

También podría gustarte