






Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Los mejores documentos en venta realizados por estudiantes que han terminado sus estudios
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Descubre las mejores universidades de tu país según los usuarios de Docsity
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Cómo crear procedimientos almacenados en MS SQL Server a través del Enterprise Manager y mediante código SQL. Se detalla el uso de las sentencias CREATE PROCEDURE, ALTER PROCEDURE y EXEC, así como la ejecución de procedimientos con parámetros de entrada-salida. Además, se presentan ejemplos de procedimientos que devuelven valores numéricos y conjuntos de resultados.
Qué aprenderás
Tipo: Apuntes
1 / 10
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
Facultad de Estadística e Informática
Si lo hacemos por el Enterprise Manager, encima de la base de datos, desplegaremos la carpeta de
storeds, botón derecho y "New Stored Procedure"
El Enterprise Manager por defecto pone:
CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS
Un store procedure o procedimiento almacenado es un programa dentro de la base de datos que
ejecuta una acción o conjunto de acciones específicas.
Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código.
Los procedimientos almacenados pueden devolver valores (numérico entero) o conjuntos de
resultados.
Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.
CREATE PROCEDURE <nombre_procedure> [@param1
-- Sentencias del procedure
Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE.
ALTER PROCEDURE <nombre_procedure> [@param1
Facultad de Estadística e Informática
-- Sentencias del procedure
El siguiente ejemplo muestra un procedimiento almacenado, denominado spu_addCliente que inserta
un registro en la tabla "CLIENTES".
CREATE PROCEDURE spu_addCliente @nombre varchar ( 100 ),@apellido1 varchar ( 100 ),@apellido varchar ( 100 ),@codCli varchar ( 20 ),@fxNaciento datetime
INSERT INTO CLIENTES(nombre, apellido1, apellido2, codcli, fxnacimiento) VALUES (@nombre, @apellido1, @apellido2, @codcli, @fxNaciento)
Para ejecutar un procedimiento almacenado debemos utilizar la sentencia EXEC. Cuando la ejecución
del procedimiento almacenado es la primera instrucción del lote, podemos omitir el uso de EXEC.
El siguiente ejemplo muestra la ejecución del procedimiento almacenado anterior.
DECLARE @fecha_nacimiento datetime
set @fecha_nacimiento = convert( datetime , '29/12/1976', 103 )
EXEC spu_addCliente 'David', 'Sarmiento', 'Cervantes', '00000002323', @fecha_nacimiento
Siempre es deseable que las instrucciones del procedure estén dentro de un bloque TRY CATCH y
controlados por una transacción.
ALTER PROCEDURE spu_addCliente @nombre varchar ( 100 ),@apellido1 varchar ( 100 ),@apellido varchar ( 100 ),@codCli varchar ( 20 ),@fxNaciento datetime
INSERT INTO CLIENTES(nombre, apellido1, apellido2, codcli, fxnacimiento) VALUES (@nombre, @apellido1, @apellido2, @codcli, @fxNaciento)
Facultad de Estadística e Informática
WHERE NUMCUENTA = @numCuenta) < 0
El siguiente ejemplo muestra como ejecutar el procedure y obtener el valor devuelto.
DECLARE @rv int
EXEC @rv = spu_EstaEnNumerosRojos '200700000001'
PRINT @rv
Otra característica interesante de los procedimientos almacenados es que pueden devolver uno o
varios conjuntos de resultados.
El siguiente ejemplo muestra un procedimiento almacenado que devuelve un conjunto de resultados.
CREATE PROCEDURE spu_MovimientosCuenta @numCuenta varchar ( 20 ) AS
SELECT @numCuenta, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO
WHERE NUMCUENTA = @numCuenta
La ejecución del procedimiento se realiza normalmente.
EXEC spu_MovimientosCuenta '200700000001'
Facultad de Estadística e Informática
El resultado de la ejecución:
2. Crear Triggers en MS SQL Server
Un 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:
o 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. o 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.
Trigger DML.
Los 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.
La sintaxis general de un trigger es la siguiente:
CREATE TRIGGER <Trigger_Name, sysname , Trigger_Name>
ON <Table_Name, sysname , Table_Name>
AFTER <Data_Modification_Statements, , INSERT , DELETE , UPDATE > AS
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
-- Insert statements for trigger here
Facultad de Estadística e Informática
Una consideración a tener en cuenta es que el trigger se ejecutará aunque la instrucción DML
(UPDATE, INSERT o DELETE) no haya afectado a ninguna fila. En este caso inserted y deleted devolverán un conjunto de datos vacío.
Podemos especificar a qué columnas de la tabla debe afectar el trigger.
-- SET NOCOUNT ON impide que se generen mensajes de texto
-- con cada instrucción
IF UPDATE (SALDO) -- Solo si se actualiza SALDO
INSERT INTO HCO_SALDOS(IDCUENTA, SALDO, FXSALDO) SELECT IDCUENTA, SALDO, getdate() FROM INSERTED
Los trigger están dentro de la transacción original (Insert, Delete o Update) por lo cual si dentro de
nuestro trigger hacemos un RollBack Tran, no solo estaremos echando atrás nuestro trigger sino también toda la transacción; en otras palabras si en un trigger ponemos un RollBack Tran, la transacción de Insert, Delete o Update volverá toda hacia atrás.
Facultad de Estadística e Informática
-- SET NOCOUNT ON impide que se generen mensajes de texto
-- con cada instrucción
INSERT INTO HCO_SALDOS (IDCUENTA, SALDO, FXSALDO) SELECT IDCUENTA, SALDO, getdate() FROM INSERTED
En este caso obtendremos el siguiente mensaje de error:
La transacción terminó en el desencadenador. Se anuló el lote.
Podemos activar y desactivar Triggers a través de las siguientes instrucciones.
-- Desactiva el trigger TR_CUENTAS
-- activa el trigger TR_CUENTAS
-- Desactiva todos los trigger de la tabla CUENTAS
-- Activa todos los trigger de la tabla CUENTAS
Facultad de Estadística e Informática
Nota: No siempre podremos actualizar los datos de una vista, dependerá de la complejidad de la
misma (dependerá de si el conjunto de resultados tiene acceso a la clave principal de la tabla o no), y del gestor de base de datos. No todos los gestores de bases de datos permiten actualizar vistas, ORACLE, por ejemplo, no lo permite, mientras que SQL Server sí.
Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a
la vista y una sentencia SQL SELECT válida.
CREATE VIEW <nombre_vista> AS (<sentencia_select>);
Ejemplo : Crear una vista sobre nuestra tabla alquileres, en la que se nos muestre el nombre y
apellidos del cliente en lugar de su código.
CREATE VIEW vAlquileres AS ( SELECT nombre, apellidos, matricula
FROM tAlquileres, tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo ) )
Si queremos, modificar la definición de nuestra vista podemos utilizar la sentencia ALTER VIEW, de
forma muy parecida a como lo hacíamos con las tablas. En este caso queremos añadir los campos fx_alquiler y fx_devolucion a la vista.
ALTER VIEW vAlquileres AS (
SELECT nombre, apellidos, matricula, fx_alquiler, fx_devolucion
FROM tAlquileres, tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo ) )
Por último podemos eliminar la vista a través de la sentencia DROP VIEW. Para eliminar la vista que
hemos creado anteriormente se utilizaría:
DROP VIEW vAlquileres;
Una vista se consulta como si fuese una tabla.
Para mayores referencias sobre MS SQL Server consultar: