Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Microsoft
Pag.2
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.
Pag.3
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
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
Pag.5
SESION 1
Qu es el SQL Server?
Bases de datos. Componentes lgicos: registro de datos y grupos de archivos de bases de datos.
Pag.6
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:
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.
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.
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
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.
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,
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:
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:
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.
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:
Pag.14
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.
Pag.15
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.
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
Pag.16
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
Pag.17
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.
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>
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
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*/
( 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 ) ------------------------------------------------------------------------------
Pag.20
ALTER DATABASE BDEMPRESA MODIFY FILEGROUP GPVENTAS DEFAULT -------------------------------------------------------------------------------------------------------------------Profesor Henry Chavez Viera SQL Server 2005 Express Pag.21
Pag.22
CREACIN DE TABLAS
Para crear una tabla en su base de datos utilice el 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.)
Pag.24
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)
Pag.25
Pag.26
que
---------------------------------------------------------------------------------------------------------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) --------------------------------------------------------------------------------------------------------------------
Pag.27
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
Pag.28
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
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)
Pag.30
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
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
Pag.31
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
Pag.33
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)
Pag.34
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
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:
Pag.36
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)
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
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
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.
Pag.38
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.
Pag.39
RECUPERACION DE DATOS
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
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
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
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.
Pag.43
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
Pag.44
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
Pag.45
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)
Pag.46
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.
Pag.47
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.
Pag.48
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
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
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.
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
Pag.51
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.
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:
Pag.52
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).
Pag.53
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
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
Pag.54
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
Pag.55
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.
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
Pag.56
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:
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
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
Pag.57
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)
Pag.58
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
Pag.59
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
Pag.60
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
Pag.61
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)
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.
Pag.62
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.
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
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.
Pag.63
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.
UNIVERSIDAD NACIONAL DE INGENIERIA 6. el test de comparacin con subconsulta el test ANY ,ALL, IN, EXISTS
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
Pag.65
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)
Pag.66
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
Pag.67
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
Pag.68
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
Pag.69
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
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
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
Pag.71
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
Pag.72
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 )
Pag.73
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.
Pag.74
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
Pag.75
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)
Pag.76
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')
Pag.77
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.
Pag.78
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
Pag.79
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
Pag.80
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
Pag.81
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
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')
Pag.82
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)
Pag.83
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
Pag.84
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
Pag.85
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
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:
Pag.86
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'
Pag.87
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
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)
Pag.89
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
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
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
MODIFICAR UN 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:
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.
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
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
Pag.94
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
Pag.95
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
Pag.96
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
Pag.97
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.
Pag.99
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.
Pag.101
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.
Pag.102
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.
Pag.103
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
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.
Pag.105
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.
Pag.106
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:
Pag.107
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.
Pag.108
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.
Pag.109
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
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:
Pag.110
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.
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
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.
Pag.114
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
Pag.115
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
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
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
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.
Pag.117
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.
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',
Pag.118
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
Para obtener acceso a los datos de una hoja de clculo Excel, asocie un nombre a
un intervalo de celdas. La consulta siguiente se puede utilizar para obtener acceso al intervalo denominado SalesData especificado como una tabla utilizando el
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'
Pag.119
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'; GO
Pag.120
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;
/*Restaurar Diferencial*/
RECOVERY; GO
Pag.121
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.
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;
Pag.122