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

TipoPrefijo / NotaciónÁmbitoDonde se almacenanObservaciones
Del sistemasp_Globalbase de datos masterRecuperan info de tablas del sistema; ejecutables desde cualquier BD
Localnombre definido por usuarioBase de datos donde se creanBD activaSon los que normalmente crea el desarrollador
Temporales (local)#nombreSesión de un usuariotempdbSe eliminan al cerrar la sesión
Temporales (globales)##nombreTodas las sesionestempdbDisponibles para todos los usuarios hasta que no haya sesiones usando
Extendidosxp_Global/externoimplementados como DLLSe ejecutan fuera del entorno T-SQL
💡 Věděli jste?Did you know que SQL Server guarda el nombre del procedimiento en sys.objects y su contenido en sys.sql_modules cuando la creación es sintácticamente válida?

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.

  1. Crear:
create procedure NOMBREPROCEDIMIENTO as INSTRUCCIONES;

o forma abreviada:

create proc NOMBREPROCEDIMIENTO as INSTRUCCIONES;
  1. Eliminar:
drop procedure NOMBREPROCEDIMIENTO;

o abreviado:

drop proc NOMBREPROCEDIMIENTO;
  1. Eliminar si existe (patrón recomendado):
if object_id('NOMBREPROCEDIMIENTO') is not null
    drop procedure NOMBREPROCEDIMIENTO;
💡 Věděli jste?Fun fact: si un procedimiento referencia objetos inexistentes en el momento de su creación, la creación puede completarse; esos objetos deben existir al ejecutar el procedimiento.

Ejemplo práctico: crear una tabla y poblarla mediante un procedimiento

  1. 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);
  1. 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

Zaregistruj se pro celé shrnutí
TarjetasTest de conocimientosResumenPodcastMapa mental
Empezar gratis

¿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

## 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 | Did you know que SQL Server guarda el nombre del procedimiento en sys.objects y su contenido en sys.sql_modules cuando la creación es sintácticamente válida? ## 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. 1. Crear: ```sql create procedure NOMBREPROCEDIMIENTO as INSTRUCCIONES; ``` o forma abreviada: ```sql create proc NOMBREPROCEDIMIENTO as INSTRUCCIONES; ``` 2. Eliminar: ```sql drop procedure NOMBREPROCEDIMIENTO; ``` o abreviado: ```sql drop proc NOMBREPROCEDIMIENTO; ``` 3. Eliminar si existe (patrón recomendado): ```sql if object_id('NOMBREPROCEDIMIENTO') is not null drop procedure NOMBREPROCEDIMIENTO; ``` Fun fact: si un procedimiento referencia objetos inexistentes en el momento de su creación, la creación puede completarse; esos objetos deben existir al ejecutar el procedimiento. ## Ejemplo práctico: crear una tabla y poblarla mediante un procedimiento 1) Eliminamos y creamos el procedimiento que genera la tabla libros y la rellena: ```sql 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); ``` 2) 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: ```sql create proc NOMBREPROCEDIMIENTO @NOMBREPARAMETRO TIPO = VALORPORDEFECTO as SENTENCIAS; ``` Ejemplo: buscar libros por a