You are on page 1of 10

Base de datos I.

Guía 10 Facultad: Ingeniería Escuela: Computación Asignatura: Base de datos I

1

Tema: Disparadores – Parte I.

Objetivo Específico
  Utilizar la sintaxis de un disparador en SQL Server Implementar transacciones en SQL Server

 Computadora con SQL Server 2008.  Guía Número 10

Materiales Equipo

y

Introducción Teórica
Un disparador (trigger o desencadenador) es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos. SQL Server proporciona los siguientes tipos de triggers:

Trigger DML, se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Trigger DDL, se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL.

En esta guía veremos únicamente los disparadores DDL Trigger DDL Los trigger DDL se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL.

Decrementar la cuenta de ahorros. asilamiento y durabilidad). Una colección de sentencias DML que forman una unidad lógica de trabajo es llamada transacción. coherencia. table_alter_drop_safety> ON DATABASE FOR <data_definition_statements. ALTER_TABLE> AS BEGIN END Manejo de datos Cuando se quiere agregar. Considere una base de datos de un banco. DROP_TABLE. Registrar la transacción en la bitácora de transacciones Insert Delete Update Select Commit Rollback Sentencias DML Añade filas de datos en una tabla Eliminar filas de datos de una tabla Modificar los datos de una tabla Recuperar datos de una tabla Confirmar como permanentes las modificaciones realizadas. . Transacción Una transacción es un conjunto de operaciones que van a ser tratadas como una única unidad. Estas transacciones deben cumplir 4 propiedades fundamentales comúnmente conocidas como ACID (atomicidad. actualizar o eliminar datos de una base de datos. Guía 10 La sintaxis general de un trigger es la siguiente. Cuando un cliente del banco transfiere dinero de su cuenta de ahorros a su cuenta de cheques. Incrementar la cuenta de cheques. 2. Deshacer todas las modificaciones realizadas desde la última confirmación. sysname. Por ejemplo: . se ejecutan sentencias DML. CREATE TRIGGER <trigger_name. La transacción más simple en SQL Server es una única sentencia SQL.2 Base de datos I. 3. la transacción puede consistir de tres operaciones separadas: 1.

Para conectarse con el servidor de base de datos elija los siguientes parámetros de autenticación: Tipo de servidor: Database Engine Nombre del servidor: SALA07-PCNumMaquina Nota: NumMaquina es el numero de maquina local Autenticación: SQL Server Authentication Login: sa . La sentencia que se utiliza para indicar el comienzo de una transacción es 'BEGIN TRAN'. Sentencias para una transacción Una transacción es un conjunto de operaciones tratadas como una sola. Si hay algún tipo de problema al hacer esta operación el SQL Server puede leer en el fichero de transacciones lo que se estaba haciendo y si es necesario puede devolver la base de datos al estado en el que se encontraba antes de recibir la sentencia. Procedimiento Parte 1: Iniciando sesión desde SQL Server Managment Studio Bibliografía 1. una transacción autocompletada(commint implícito). Esto se consigue con la sentencia 'ROLLBACK TRAN'. Si alguna de las operaciones de una transacción falla hay que deshacer la transacción en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar.Base de datos I. Este conjunto de operaciones debe marcarse como transacción para que todas las operaciones que la conforman tengan éxito o todas fracasen. Por supuesto este tipo de transacciones no requieren de nuestra intervención puesto que el sistema se encarga de todo. Si todas las operaciones de una transacción se completan con éxito hay que marcar el fin de una transacción para que la base de datos vuelva a estar en un estado consistente con la sentencia 'COMMIT TRAN'. Guía 10 3 UPDATE Products SET UnitPrice=20 WHERE ProductName ='Chai' Esta es una transacción 'autocommit'. Cargue SQL Server 2008 R2. Hacer clic en la opción Todos los programas y hacer clic en Microsoft 1 SQL Server 2008 R2 3. Sin embargo si hay que realizar varias operaciones y queremos que sean tratadas como una unidad tenemos que crear esas transacciones de manera explícita. Hacer clic en el botón Inicio Guía 2. Cuando enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones lo que va a ocurrir y a continuación realiza los cambios necesarios en la base de datos.

Luego seleccionara del menú estándar la opción (Nueva Consulta/New Query) para empezar a trabajar con las sentencia de T-SQL. 5. verifique que no existe ningún valor en esa tabla . 6. cree una carpeta llamada Practica10_BDD en el escritorio (ahí se irá guardando todos los scripts del procedimiento restante). Guía 10 Password: 123456 4.sql). 7.4 Base de datos I. Localice el icono de guardar. En el asistente para guardar archivo. A continuación digitaremos las siguientes instrucciones y las ejecutaremos Digite: Select * from información_tienda . para verificar que los datos están ingresados Digite: Select * from ventas_tienda. con el fin de guardar el nuevo archivo de sentencias T-SQL (SQLQuery1. Luego de clic en el botón conectar y asi ingresar a la ventana del SQL Server Managment Studio.

Asignando variables en T-SQL.@venta=venta.@fecha=fecha FROM ventas_tienda where tienda='Soyapango' PRINT 'el resultado de la asignacion es el siguiente' PRINT @tienda PRINT @venta PRINT @fecha . En Transact SQL los identificadores de variables deben comenzar por el carácter @.venta. el nombre de una variable debe comenzar por @. Para declarar variables en Transact SQL debemos utilizar la palabra clave declare.@venta float. Podemos utilizar SELECT para asignar valores DECLARE @tienda VARCHAR(100). Ejemplo declare @nombre varchar(50) set @nombre = 'Utilizando variables en SQL' print @Nombre -. Ejemplo 2. podemos utilizar SET para asignar el resultado de una consulta (la variable solo podrá contener un único valor) declare @venta float SET @venta = (SELECT venta from ventas_tienda where tienda='Soyapango') PRINT @venta Ejemplo 3. seguido del identificador y tipo de datos de la variable. Guía 10 5 Ejecute el siguiente script y luego revise la tabla ventas_tiendas INSERT INTO ventas_tienda (tienda. es decir.* Por qué se utiliza la opción OUTPUT INSERTED? ___________________________________________________________________ USO DE VARIABLES Una variable es un valor identificado por un nombre (identificador) sobre el que podemos realizar modificaciones.@fecha datetime SELECT @tienda=tienda.fecha) SELECT tienda. para esto utilizamos la siguiente sentencia.venta.13 OUTPUT INSERTED.Base de datos I.Imprime por pantalla el valor de @nombre. UPDATE ventas_tienda SET ventaiva=venta*1.fecha FROM informacion_tienda ACTUALIZAR Agreguemos un campo ventaiva ALTER TABLE ventas_tienda ADD ventainva float Inicialmente ese campo aparece vacio en todas las columnas y queremos que ese campo contenga la venta + el 13% del iva.

ALTER_TABLE AS BEGIN RAISERROR ('No está permitido borrar ni modificar tablas ! ' . Este conjunto de operaciones debe marcarse como transacción para que todas las operaciones que la conforman tengan éxito o todas fracasen. Si alguna de las operaciones de una transacción falla hay que deshacer la transacción en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar.6 Base de datos I. Intente eliminar la tabla ventas_tienda Para eliminar un disparador se utiliza la siguiente instrucción DROP TRIGGER nombretrigger ON DATABASE TRANSACCIONES Como se mencionó en la introducción una transacción es un conjunto de operaciones tratadas como una sola. 1) ROLLBACK TRANSACTION END Estas instrucciones crean un disparador que se activará en el momento que el usuario desee: eliminar o modificar una tabla. Cree la siguiente tabla prueba e inserte el dato que aparece --TABLA PRUEBA CREATE TABLE PRUEBA (nombre varchar(25). 16. La sentencia que se utiliza para indicar el comienzo de una transacción es 'BEGIN TRAN'. Guía 10 Disparadores Digite la siguientes instrucciones y ejecutelas CREATE TRIGGER Disp_SEGURIDAD ON DATABASE FOR DROP_TABLE.'alfaro') Al realizar una consulta aparece efectivamente el dato . Esto se consigue con la sentencia 'ROLLBACK RAN'. apellido varchar(25)) --DATOS insert into PRUEBA values('carlos'. Si todas las operaciones de una transacción se completan con éxito hay que marcar el fin de una transacción para que la base de datos vuelva a estar en un estado consistente con la sentencia 'COMMIT TRAN' Ejemplo.

@venta float.@ventaiva) COMMIT TRAN PRINT 'VALORES INSERTADOS CON EXITO' . @fecha datetime.@venta+100.@fecha. @tienda varchar(25).Base de datos I. pero esta vez dentro de una transacción BEGIN TRAN insert into PRUEBA values('Mario'. si deseamos que los datos se inserten digitamos COMMIT TRAN.'credito') --concatenando valores print 'Tienda'+ ' '+@tienda --no se puede concatenar texto con numeros hay que hacer conversión print 'venta'+ ' '+CAST(@venta as varchar) COMMIT TRAN Ejemplo 3 --insertando datos en tabla ventas tienda utilizando variables declare @tienda varchar(25).13 begin tran INSERT INTO ventas_tienda values(@tienda.@tienda=tienda from ventas_tienda where tienda=@buscar --Insertando datos utilizando variables insert into informacion_tienda values(@tienda. @ventaiva float set @tienda='Cuscatancingo' set @venta=100 set @fecha='2010-02-04' set @ventaiva=@venta*1. Guía 10 7 Ahora insertaremos 2 nuevos datos.'Abarca') Estos datos si realizamos un select * from prueba. pero si deseamos revertir la inserción digitamos ROLLBACK TRAN Verificamos nuevamente la tabla y vemos que la inserción de datos se ha revertido.'Abarca') COMMIT TRAN Ejemplo 2 declare @venta float. se mostraran como insertados en la tabla.@buscar varchar(25) set @buscar='Soyapango' Begin tran select @venta=venta.@venta.'Secreto'. Si desea que los datos sean insertados de una sola vez tendrá que digitarlo de la siguiente manera BEGIN TRAN insert into PRUEBA values('Mario'.'Mendez') insert into PRUEBA values('Marcela'.'Mendez') insert into PRUEBA values('Marcela'. pero si anteriormente habíamos utilizado ROLLBACK nos enviará un mensaje de error: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.'2011-0221'.

. código de pedido y fecha de pedido. Cree un disparador que se active al momento de eliminar o modificar la base de datos almacen 2. Modifique el precio de 4.5 a 10 del jabón de la tabla productos. realice la sentencia que muestre la fila modificada 4. Ejemplo Cantidad=20 codigo='prod01' fecha='2010-02-02' Pedido=1 La existencia actual del prod01 es 100. al final de la transacción imprimir un mensaje que indique el total del pedido. multiplicando el precio del producto por la cantidad del pedido. ingrese esos campos en la tabla pedido y luego busque ese producto en la tabla productos donde disminuya la existencia del producto a. Cree una transacción que dado un código de producto. cantidad.8 Base de datos I. Guía 10 PRINT 'TIENDA'+@tienda Análisis de resultados  Cree una base de datos de nombre ALMACEN con las siguientes tablas Productos pedidos Inserte los siguientes datos a la tabla productos 1. Cree una transacción parecida al ejemplo 3 para insertar productos 3. se deberá actualizar a 80. cuando se realice esa inserción.

edición Guía 4 fía . SQL Server 2008. Madrid.Base de datos I. España : ANAYA. Guía 10 9 Investigación Complementaria Investigue para que se utiliza el comando BULK INSERT y presente un ejemplo práctico Guía 3 Bibliografía Guía 3 2009 1era fía 4  Guía Francisco Charte Ojeda.

Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100% . Guía 10 Guía10:Disparadores Parte I Hoja de cotejo: Docente: Tema: Presentación del programa 10 1 Alumno: Alumno: Máquina No:Máquina No: GL: GL: Máquina No: Docente: Docente: GL: Fecha: a EVALUACION % CONOCIMIENTO Del 20 al 30% 1-4 Conocimie nto deficient e de los fundament os teóricos 5-7 Conocimiento y explicación incompleta de los fundamentos teóricos 8-10 Conocimiento completo y explicación clara de los fundamentos teóricos Nota APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva .10 Base de datos I.