Resumen de Procedimientos Almacenados en SQL Server
Procedimientos Almacenados SQL Server: Guía Completa para Estudiantes
Introducción
Los procedimientos almacenados son bloques de código T-SQL guardados en el servidor que permiten encapsular tareas repetitivas y ejecutar lógica en el lado del servidor. Facilitan la reutilización, la seguridad y reducen el tráfico entre cliente y servidor. En este material veremos tipos, creación, parámetros, salida, encriptado y modificación, con ejemplos prácticos.
Definición: Un procedimiento almacenado es un conjunto de instrucciones SQL nombrado, almacenado en el servidor y ejecutable mediante una sola llamada.
Tipos de procedimientos almacenados
| Tipo | Prefijo / Notación | Ámbito | Donde se almacenan | Observaciones |
|---|---|---|---|---|
| Del sistema | sp_ | Global | base de datos master | Recuperan info de tablas del sistema; ejecutables desde cualquier BD |
| Local | nombre definido por usuario | Base de datos donde se crean | BD activa | Son los que normalmente crea el desarrollador |
| Temporales (local) | #nombre | Sesión de un usuario | tempdb | Se eliminan al cerrar la sesión |
| Temporales (globales) | ##nombre | Todas las sesiones | tempdb | Disponibles para todos los usuarios hasta que no haya sesiones usando |
| Extendidos | xp_ | Global/externo | implementados como DLL | Se ejecutan fuera del entorno T-SQL |
Ventajas principales
- Centralizan la lógica: una única fuente de verdad para operaciones comunes.
- Control de acceso: permiten restringir acceso directo a tablas.
- Reducción de tráfico: una llamada en lugar de múltiples sentencias.
- Reutilización y mantenimiento: cambios en un solo lugar actualizan la lógica para todas las aplicaciones.
Creación y eliminación básica
Nota: Se recomienda probar las sentencias T-SQL antes de encapsularlas en un procedimiento.
- Crear:
create procedure NOMBREPROCEDIMIENTO as INSTRUCCIONES;
o forma abreviada:
create proc NOMBREPROCEDIMIENTO as INSTRUCCIONES;
- Eliminar:
drop procedure NOMBREPROCEDIMIENTO;
o abreviado:
drop proc NOMBREPROCEDIMIENTO;
- Eliminar si existe (patrón recomendado):
if object_id('NOMBREPROCEDIMIENTO') is not null
drop procedure NOMBREPROCEDIMIENTO;
Ejemplo práctico: crear una tabla y poblarla mediante un procedimiento
- Eliminamos y creamos el procedimiento que genera la tabla libros y la rellena:
if object_id('pa_crear_libros') is not null
drop procedure pa_crear_libros;
go
create proc pa_crear_libros
as
if object_id('libros') is not null
drop table libros;
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
cantidad smallint,
primary key(codigo)
);
insert into libros (titulo, autor, editorial, precio, cantidad) values
('Uno', 'Richard Bach', 'Planeta', 15,5),
('Ilusiones', 'Richard Bach', 'Planeta', 18,50),
('El aleph', 'Borges', 'Emece', 25,9),
('Aprenda PHP', 'Mario Molina', 'Nuevo siglo', 45,100),
('Matematica estas ahi', 'Paenza', 'Nuevo siglo', 12,50),
('Java en 10 minutos', 'Mario Molina', 'Paidos', 35,300);
- Ejecutar: exec pa_crear_libros; — crea y rellena la tabla libros.
Uso de procedimientos para consultas parametrizadas
Definición: Parámetro de entrada es una variable que permite pasar información al procedimiento; parámetro de salida permite devolver información al llamador.
Parámetros de entrada
Sintaxis:
create proc NOMBREPROCEDIMIENTO
@NOMBREPARAMETRO TIPO = VALORPORDEFECTO
as
SENTENCIAS;
Ejemplo: buscar libros por a
¿Ya tienes cuenta? Iniciar sesión
Procedimientos almacenados
Klíčové pojmy: Procedimiento almacenado: bloque T-SQL nombrado y guardado en el servidor, Tipos: sistema (sp_), locales, temporales (#/##) y extendidos (xp_), Crear: create procedure NOMBRE as INSTRUCCIONES;, Eliminar seguro: if object_id('NOMBRE') is not null drop procedure NOMBRE;, Parámetros de entrada con @nombre TIPO y valores por defecto opcionales, Parámetros de salida: usar OUTPUT y capturar con variable local al ejecutar, WITH ENCRYPTION oculta el texto pero no es seguridad infalible, Modificar con alter procedure y volver a documentar, Usar sp_help, sp_helptext, sp_stored_procedures y sp_depends para diagnóstico, Las tablas temporales creadas dentro del procedimiento existen sólo durante su ejecución, Probar las sentencias antes de encapsularlas en un procedimiento, Preferir procedimientos claros, con manejo de errores y nombres descriptivos