Programación Transact SQL
Scripts
Procedimientos Almacenados
Funciones
Triggers
Procedimientos Almacenados
Son un conjunto de instrucciones de Transact-SQL que pueden aceptar y devolver
parámetros proporcionados por el usuario.
Tipos de procedimientos almacenados
Procedimientos Almacenados del Sistema:
Generalmente están guardados en la base de datos MASTER son identificados por
iniciar en SP, permiten realizar una amplia variedad de tareas, a continuación
mostramos algunos procedimientos almacenados del sistema:
Sp_columns
Sp_column_privileges
Sp_databases
Sp_fkeys
Sp_pkeys
Sp_tables
Sp_server_info
Sp_statistics
Ejemplos
--Procedimiento del sistema que muestra
--las columnas de la tabla país
sp_columns pais
--Procedimiento almacenado del sistema para mostrar los
--privilegios de las columnas involucradas de la tabla pasajero
Sp_column_privileges pasajero
--Procedimiento almacenado del sistema que muestra
--las base de datos del servidor activo.
Sp_databases
--Procedimiento almacenado que muestra las características
--de nuestro servidor activo
sp_server_info
--procedimiento almacenado que muestra donde se hace referencia
--a la tabla pasajero
Sp_fkeys pasajero
--Procedimiento almacenado que muestra la llave primaria
--de la tabla pasajero
Sp_pkeys pasajero
Procedimientos Almacenados definidos por el usuario:
Son procedimientos que se implementan en forma personalizada según las necesidades
del usuario.
Los Procedimientos Almacenados pueden tener parámetros de entrada y salida.
Procedimientos Almacenados - Sintáxis
Create procedure Nombre_Procedimiento
@parámetro1 [tipo dato],
@parámetroN [tipo dato]
AS
<Instrucciones>
Ejemplos:
Ejemplo 1:
Implementar un procedimiento almacenado que muestre el listado de los países y su
total de pasajeros.
Tabla Pasajero - País
--Evaluamos si ya existe el procedimiento
--almacenado que queremos implementar
--si ya existe lo eliminamos
if object_id('pasajerosxpais') is not null
begin
drop procedure pasajerosxpais
end
go
--Implementamos nuestro procedimiento almacenado
create procedure pasajerosxpais
as
select pai.nombre,count(*) as [Total]
from pasajero pas join pais pai
on pas.idpais=pai.idpais
group by pai.nombre
go
--Ejecutamos el procedimiento almacenado
exec pasajerosxpais
Ejemplo 2:
Implementar un procedimiento almacenado que permita mostrar los pagos de un
determinado pasajero, considerar para este caso como parámetro de búsqueda el
número de documento del pasajero.
Tabla Pasajero - Pais=Pago
--Evaluamos si ya existe el procedimiento
--almacenado que queremos implementar
--si ya existe lo eliminamos
if object_id('pagosxpasajero') is not null
begin
drop procedure pagosxpasajero
end
go
--Implementamos nuestro procedimiento almacenado
alter procedure pagosxpasajero
@num_documento varchar(12)
as
select fecha,monto,tipo_comprobante,num_comprobante
from pago where idpasajero=
(select idpasajero from pasajero
where num_documento=@num_documento)
go
--Ejecutamos el procedimiento almacenado y le enviamos el parámetro
de entrada
exec pagosxpasajero '47715777'
Ejemplo 3:
Implementar un procedimiento almacenado que permita registrar un Nuevo país, para
este caso definir como parámetro de entrada todos los campos referentes a la tabla
país.
Tabla País
--Evaluamos si ya existe el procedimiento
--almacenado que queremos implementar
--si ya existe lo eliminamos
if object_id('nuevopais') is not null
begin
drop procedure nuevopais
end
go
--Implementamos nuestro procedimiento almacenado
create procedure nuevopais
@idpais char(4),
@nombre varchar(30)
as
insert into pais (idpais,nombre)
values(@idpais,@nombre)
go
--Ejecutamos el procedimiento almacenado y le enviamos los
parámetros de entrada
exec nuevopais '0014','Dinamarca'
Ejemplo 4:
Implementar un procedimiento almacenado que retorne el total de pagos recibidos en
una determinada fecha.
Tabla Pago
--Evaluamos si ya existe el procedimiento
--almacenado que queremos implementar
--si ya existe lo eliminamos
if object_id('pagosxfecha') is not null
begin
drop procedure pagosxfecha
end
go
--Implementamos nuestro procedimiento almacenado
create procedure pagosxfecha
@fecha date,
@total money output
as
select @total=sum(monto) from pago
where fecha=@fecha
go
--Ejecutamos el procedimiento almacenado y le enviamos
--los parámetros
declare @t money
exec pagosxfecha '2014-05-05',@total=@t output
print 'Total' + cast(@t as char(10))