Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con Trigger en SQL Server 2005

Estas en el tema de Problema con Trigger en SQL Server 2005 en el foro de SQL Server en Foros del Web. Hola foreros!! tengo un problema con un trigger que se ejecuta al hacer un insert en una tabla. Lo que pasa es que para hacer ...
  #1 (permalink)  
Antiguo 12/10/2010, 15:56
Avatar de Danielfuzz  
Fecha de Ingreso: septiembre-2007
Mensajes: 111
Antigüedad: 16 años, 7 meses
Puntos: 18
Problema con Trigger en SQL Server 2005

Hola foreros!!

tengo un problema con un trigger que se ejecuta al hacer un insert en una tabla.
Lo que pasa es que para hacer el insert llamo a un porcedimiento almacenado, éste hace una serie de validaciones, si esta todo OK hace el INSERT lo que ocasiona que se dispare el trigger pero algo pasa que me sale este mensaje:

Msg 3609, Level 16, State 1, Procedure sp_insDetallePago, Line 31
The transaction ended in the trigger. The batch has been aborted.


Lo más extrano es que se hace el insert correctamente en la tabla.

Cómo puedo solucionar esto?

Les paso el procedimiento y el trigger:

Código:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[sp_insDetallePago]
	@pago int,
	@monto decimal(18,2),
	@boleta nchar(10),
	@msg nchar(100)=null OUTPUT
AS
BEGIN TRANSACTION
	SET NOCOUNT ON;
	IF dbo.validarBoleta(@boleta)=1
		SET @msg='Boleta válida'
	else
	BEGIN
		SET @msg='Boleta no válida'
		RAISERROR ('Boleta no válida', 
			8, -- Severidad 
			1   -- Estado
		)
		GOTO error
	END
	Declare @deuda decimal(18,2)
	SET @deuda=(Select (Monto-Cancelado) From vw_pagos where ID_Pago=@pago)
	IF @@ERROR<>0
		GOTO error
	IF @monto>@deuda
	BEGIN
		SET @msg='El monto a cancelar es mayor al adeudado'
		GOTO error
	END
	INSERT INTO DetallePago values(@pago, @monto, GETDATE(),@boleta)
	IF @@ERROR<>0
		GOTO error
COMMIT TRANSACTION
	return(0)
error:
ROLLBACK TRANSACTION
	print 'Error'
	return(1)
El trigger

Código:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO




ALTER TRIGGER [dbo].[trg_INS_DetallePago] on [dbo].[DetallePago] AFTER INSERT AS
	Declare @deuda decimal(18,2)
	Declare @monto decimal(18,2)
	Declare @boleta nchar(10)
	SET @boleta = (Select Boleta FROM INSERTED)
	SET @monto = (Select Monto FROM INSERTED)
	SET @deuda=(Select (Monto-Cancelado) From vw_pagos where ID_Pago=(SELECT ID_Pago FROM INSERTED))
	IF @@ERROR<>0
		GOTO error
	IF @monto<=0
	BEGIN
		print 'El monto a cancelar debe ser mayor a 0'
		GOTO error
	END	
	--IF @monto>@deuda
	IF @deuda<0
	BEGIN
		Declare @aux int
		SET @aux=(SELECT ID_Pago FROM INSERTED)
		print 'El monto a cancelar es mayor al adeudado'
		GOTO error
	END	
--	IF dbo.validarBoleta(@boleta)=0
--	BEGIN
--		print 'Boleta no válida'
--		GOTO error
--	END	
	--IF @deuda-@monto=0
	IF @deuda=0
		UPDATE Pago set Estado ='t' Where ID=(SELECT ID_Pago FROM INSERTED)
	ELSE
		UPDATE Pago set Estado ='c' Where ID=(SELECT ID_Pago FROM INSERTED)
	IF @@ERROR<>0
	BEGIN
		print 'No se pudo actualizar el estado del pago'
		GOTO error
	END
	COMMIT TRAN
	return
	error:
	ROLLBACK TRAN 
		print 'Error'
		return
Saludos!!
  #2 (permalink)  
Antiguo 13/10/2010, 11:00
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problema con Trigger en SQL Server 2005

Daniel

En lo personal, evito el uso de trigger's, ya que estos fueron creados en un inicio para resguardar la INTEGRIDAD REFERENCIAL.

¿No deberia tener todo ese codigo en sus procedimientos almacenados?
__________________
MCTS Isaias Islas

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:46.