CREATE PROCEDURE [dbo].[SP_INS_SEG_MODULO]
@PC_DES_MODULO VARCHAR(50),
@PC_MAN_MODULO VARCHAR(200),
@PC_USU_CREADOR VARCHAR(20),
@PF_FEC_CREACION DATETIME,
@PC_USU_ACTUALIZA VARCHAR(20),
@PF_FEC_ACTUALIZA DATETIME,
@OC_MESSAGE_ERROR VARCHAR(1000) OUTPUT
AS
BEGIN TRY
DECLARE @PC_ID_MODULO INTEGER
EXEC SP_GEN_ID_MODULO
@PC_ID_MODULO OUTPUT
INSERT INTO SEG_MODULO
(ID_MODULO,
DES_MODULO,
MAN_MODULO,
USU_CREADOR,
FEC_CREACION,
USU_ACTUALIZA,
FEC_ACTUALIZA)
VALUES (@PC_ID_MODULO,
@PC_DES_MODULO,
@PC_MAN_MODULO,
@PC_USU_CREADOR,
@PF_FEC_CREACION,
@PC_USU_ACTUALIZA,
@PF_FEC_ACTUALIZA)
SELECT @OC_MESSAGE_ERROR = ''
END TRY
BEGIN CATCH
SELECT @OC_MESSAGE_ERROR = (SELECT 'ERROR EN PROCEDIMIENTO : '+ ERROR_PROCEDURE() + ' , MENSAJE : ' + ERROR_MESSAGE() + ' ID_MODULO : ' + CONVERT(VARCHAR,@PC_ID_MODULO))
END CATCH
 |
INGRESAR PARÁMETROS Y ACEPTAR |
Script que genera al ejecutar el procedimiento almacenado.
USE [BD_SISTEMA]
GO
DECLARE @return_value int,
@OC_MESSAGE_ERROR varchar(1000)
EXEC @return_value = [dbo].[SP_INS_SEG_MODULO]
@PC_DES_MODULO = N'SISTEMA',
@PC_MAN_MODULO = N'\\192.168.1.113\Sistemas\ManualModulo',
@PC_USU_CREADOR = N'HADSON',
@PF_FEC_CREACION = N'18/04/2014',
@PC_USU_ACTUALIZA = N'HADSON',
@PF_FEC_ACTUALIZA = N'18/04/2014',
@OC_MESSAGE_ERROR = @OC_MESSAGE_ERROR OUTPUT
SELECT @OC_MESSAGE_ERROR as N'@OC_MESSAGE_ERROR'
SELECT 'Return Value' = @return_value
GO
 |
RESULTADOS |
En nuestra primera inserción ingresamos como descripción de modulo SISTEMA y si intentamos ingresar nuevamente SISTEMA se insertará sin ningún problema, generando ambigüedad de datos, ejecutamos en Script generado de nuestro procedimiento almacenado.
 |
COMO RESULTADO AHORA CONTAMOS CON 2 REGISTRO DE LA MISMA DESCRIPCIÓN DE MODULO |
Para poder controlar nuestra validación de inserción de datos utilizaremos en este caso un mensaje personalizado y en otro ejemplo utilizaremos la función RAISERROR de T-SQL. Para ambos casos el programador es quien lo define.
Ejemplo con mensaje personalizado:
ALTER PROCEDURE [dbo].[SP_INS_SEG_MODULO]
@PC_DES_MODULO VARCHAR(50),
@PC_MAN_MODULO VARCHAR(200),
@PC_USU_CREADOR VARCHAR(20),
@PF_FEC_CREACION DATETIME,
@PC_USU_ACTUALIZA VARCHAR(20),
@PF_FEC_ACTUALIZA DATETIME,
@OC_MESSAGE_ERROR VARCHAR(1000) OUTPUT
AS
BEGIN TRY
DECLARE @PC_ID_MODULO INTEGER
IF EXISTS (SELECT * FROM SEG_MODULO
WHERE DES_MODULO = LTRIM(RTRIM(@PC_DES_MODULO)))
BEGIN
SELECT @OC_MESSAGE_ERROR = 'LA DESCRIPCION QUE ESTA INTENTANDO REGISTRAS YA EXISTE EN LA BASE DE DATOS'
END
ELSE
BEGIN
EXEC SP_GEN_ID_MODULO
@PC_ID_MODULO OUTPUT
INSERT INTO SEG_MODULO
(ID_MODULO,
DES_MODULO,
MAN_MODULO,
USU_CREADOR,
FEC_CREACION,
USU_ACTUALIZA,
FEC_ACTUALIZA)
VALUES (@PC_ID_MODULO,
@PC_DES_MODULO,
@PC_MAN_MODULO,
@PC_USU_CREADOR,
@PF_FEC_CREACION,
@PC_USU_ACTUALIZA,
@PF_FEC_ACTUALIZA)
SELECT @OC_MESSAGE_ERROR = ''
END
END TRY
BEGIN CATCH
SELECT @OC_MESSAGE_ERROR = (SELECT 'ERROR EN PROCEDIMIENTO : '+ ERROR_PROCEDURE() + ' , MENSAJE : ' + ERROR_MESSAGE() + ' ID_MODULO : ' + CONVERT(VARCHAR,@PC_ID_MODULO))
END CATCH
 |
COMO SE APRECIA EL PARAMETRO DE SALIDA @OC_MESSAGE_ERROR DEVUELVE EL MENSAJE PERSONALIZADO |
Esto se debe a la simple y sencilla validación que se realiza y se devuelve en nuestro parámetro de salida. Línea de código que realiza esta validación.
IF EXISTS (SELECT * FROM SEG_MODULO
WHERE DES_MODULO = LTRIM(RTRIM(@PC_DES_MODULO)))
BEGIN
SELECT @OC_MESSAGE_ERROR = 'LA DESCRIPCION QUE ESTA INTENTANDO REGISTRAS YA EXISTE EN LA BASE DE DATOS'
END
Ejemplo con RAISERROR :
Para poder hacer uso de esta función propia del T-SQL modificaremos nuestro procedimiento almacenado. Donde nuestro parámetro de salida @OC_MESSAGE_ERROR, lo pasaremos como un variable para setear el mensaje o también pueden hacerlo de manera directa RAISERROR ( 'LA DESCRIPCION QUE ESTA INTENTANDO REGISTRAS YA EXISTE EN LA BASE DE DATOS',16,1) el resultado sera lo mismo.
ALTER PROCEDURE [dbo].[SP_INS_SEG_MODULO]
@PC_DES_MODULO VARCHAR(50),
@PC_MAN_MODULO VARCHAR(200),
@PC_USU_CREADOR VARCHAR(20),
@PF_FEC_CREACION DATETIME,
@PC_USU_ACTUALIZA VARCHAR(20),
@PF_FEC_ACTUALIZA DATETIME
AS
BEGIN
DECLARE @PC_ID_MODULO INTEGER
DECLARE @OC_MESSAGE_ERROR VARCHAR(1000)
IF EXISTS (SELECT * FROM SEG_MODULO
WHERE DES_MODULO = LTRIM(RTRIM(@PC_DES_MODULO)))
BEGIN
SET @OC_MESSAGE_ERROR = 'LA DESCRIPCION QUE ESTA INTENTANDO REGISTRAS YA EXISTE EN LA BASE DE DATOS'
RAISERROR (@OC_MESSAGE_ERROR,16,1)
END
ELSE
BEGIN
EXEC SP_GEN_ID_MODULO
@PC_ID_MODULO OUTPUT
INSERT INTO SEG_MODULO
(ID_MODULO,
DES_MODULO,
MAN_MODULO,
USU_CREADOR,
FEC_CREACION,
USU_ACTUALIZA,
FEC_ACTUALIZA)
VALUES (@PC_ID_MODULO,
@PC_DES_MODULO,
@PC_MAN_MODULO,
@PC_USU_CREADOR,
@PF_FEC_CREACION,
@PC_USU_ACTUALIZA,
@PF_FEC_ACTUALIZA)
SELECT @OC_MESSAGE_ERROR = ''
END
END
 |
RESULTADO - RAISERROR |
En ambos casos la validación es a nivel de servidor de base de datos, y puedes usar varios mensaje personalizados dependiendo el desarrollo que vienes realizando.
Cambios la descripción para ver efecto de todo este proceso que acabamos de realizar.
 |
RESULTADO: SE INGRESO LA DESCRIPCIÓN VENTA |
Esto es una las formas de controlar las validaciones a nivel de servidor de base de datos, hay muchas formas más de poder hacerlo. Nos vemos en nuestro siguiente apartado.
0 Comentarios