Este tema de Procedimientos Almacenados en muy pero muy importante nos ayuda mucho a la hora hacer varias acciones pero que se ejecuten en la base de datos.
Por ejemplo: En el software de ventas cuando se realizaba una venta se ingresaba en la tabla detalle el registro del producto pero también había que guardar en la tabla Kardex el movimiento de ese producto, era 2 procesos por cada producto ingresado.
Con un procedimiento almacenada y usando algo llamado TRIGGER podemos realizar esa acción de manera automática que cada vez que se ingrese un producto a la tabla detalle automáticamente agregue un registro a la tabla kardex.
Y hay muchas cosas que se pueden hacer del lado de la base de datos que mejorarían todas las operaciones en el software.
¿Cómo se crea un procedimiento almacenado en SQL Server?
El primer paso es abrir la base de datos luego de esto vamos a la opción Programación, desplegamos y aparece un Item llamado Procedimientos almacenados cómo en la siguiente imagen:
Luego de seleccionar la Opción de Procedimiento almacenado nos aparece la siguiente pantalla:
Mucho código pero no es para asustarse muchas cosas son comentarios y explicaciones de como se deben implementar estos procedimientos.
El primer procedimiento que se va a desarrollar es el de crear cuenta de cobro para poder explicarles cada parte y vean que no es complicado es como programar pero se usa código SQL.
Creando el Primero Procedimiento Almacenado
Lo primero es poner el nombre del procedimiento se modifica y la parte de CREATE PROCEDURE y debe quedar de la siguiente manera:
CREATE PROCEDURE GuardarCuentaCobro
Lugo de esto vienes los parámetros de entrada:
@valorCuenta money, @IdEmpresa int, @IdUsuario int
Se declaran tres variables que son necesarias :
declare @IDcuenta int; declare @Empresa int; declare @Usuario int;
Se consulta el ultimo Id de la tabla tblCuentasCobro y se le suma uno para el Id siguiente que se necesita para guardar en la tabla
set @IDcuenta = (Select max(id_cuentacobro) + 1 from tblcuenta_cobros); if @IDcuenta is null set @IDcuenta = 1;
Se consulta el ultimo Id se le suma uno y se guarda en la variable @IDcuenta por esa razón se utiliza la palabra set para asignar el valor, esto no es muy diferente de hace un procedimiento en Visual Basic.
En casi de que no exista datos en la tabla la variable queda como null en ese caso se valida si es null y se le asigna el valor de uno a esa variable.
Para el procedimiento se necesita validar que el Id Empresa que se esta recibiendo si exista en la tabla tblEmpresas para eso se consulta y se valida con un condicional:
set @Empresa = (Select id_empresa from tblempresas where id_empresa = @IdEmpresa); if @Empresa is null GOTO ErrorEmpresa;
De igual manera se valida el usuario que se recibe como parámetro:
set @Usuario = (Select id_usuario from tblusuarios where id_usuario = @IdUsuario); if @Usuario is null GOTO ErrorUsuario;
Luego de hacer todas la validaciones correspondientes se procede a insertar este registro en la tabla:
insert into tblcuenta_cobros (id_cuentacobro, fecha_cuenta, valor_cuenta, id_empresa, id_usuario) values (@IDcuenta, GETDATE(), @valorCuenta, @IdEmpresa, @IdUsuario) if @@ROWCOUNT > 0 select 1 as cod, @IDcuenta as id; else select 0 as cod, 'Error al guardar' as mensaje; Return 0;
@@ROWCOUNT esta función devuelve cuantos registro se vieron afectados con la operación anterior, esto nos sirve para devolver 1 en caso de que la inserción se hiciera con éxito por eso el select 1 en caso contrario se devuelve un cero.
El código siguiente es en los casos que la validación reportara error por eso el uso de GOTO para saltar de un lugar a otro y el return para salir del procedimiento.
ErrorEmpresa: select 0 as cod, 'Error la Empresa no existe, verifique' as mensaje; return 0; ErrorUsuario: select 0 as cod, 'Error El Usuario no existe, verifique' as mensaje;
El código completo del procedimiento es el siguiente:
USE [dbcuentas_cobros] GO /****** Object: StoredProcedure [dbo].[GuardarCuentaCobro] Script Date: 12/10/2022 11:43:16 a. m. ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[GuardarCuentaCobro] -- Add the parameters for the stored procedure here @valorCuenta money, @IdEmpresa int, @IdUsuario int AS BEGIN declare @IDcuenta int; declare @Empresa int; declare @Usuario int; SET NOCOUNT ON; set @IDcuenta = (Select max(id_cuentacobro) + 1 from tblcuenta_cobros); set @Empresa = (Select id_empresa from tblempresas where id_empresa = @IdEmpresa); if @Empresa is null GOTO ErrorEmpresa; set @Usuario = (Select id_usuario from tblusuarios where id_usuario = @IdUsuario); if @Usuario is null GOTO ErrorUsuario; if @IDcuenta is null set @IDcuenta = 1; insert into tblcuenta_cobros (id_cuentacobro, fecha_cuenta, valor_cuenta, id_empresa, id_usuario) values (@IDcuenta, GETDATE(), @valorCuenta, @IdEmpresa, @IdUsuario) if @@ROWCOUNT > 0 select 1 as cod, @IDcuenta as id; else select 0 as cod, 'Error al guardar' as mensaje; Return 0; ErrorEmpresa: select 0 as cod, 'Error la Empresa no existe, verifique' as mensaje; return 0; ErrorUsuario: select 0 as cod, 'Error El Usuario no existe, verifique' as mensaje; END
El video explicativo es el siguiente:
síguenos en el sitio web: https://www.programaresfacil.co/
Canal de Youtube: https://www.youtube.com/ProgramarEsFacil
Grupo de Telegram: https://t.me/+FS_lXODpHt-6z_J7