Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/02/2011, 05:15
jupecal
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Problemas con un trigger en sql server 2005

Buenas a todos,

He migrado una base de datos sql server 2000 a sql server 2005 (sp4) y en principio no he tenido ningun problema, pero cuando he empezado a utilizarla (mediante una aplicacion java) he comenzado a tenerlos.

Os cuento:

en una tabla tengo un trigger (after insert) creado del siguiente modo:

CREATE TRIGGER [dbo].[TI_ESTADO_CONTABLE_DISP] ON [dbo].[FMO_ESTADO_CONTABLE_DISP]
WITH EXEC AS CALLER
AFTER INSERT
AS
BEGIN
DECLARE @CONJUNTO_FUNCIONAL CODIGO_GENERAL,
@CODIGO_TIPO_MONEDA smallint,
@errno int,
@errmsg varchar(255)
BEGIN
BEGIN TRANSACTION
SELECT @CONJUNTO_FUNCIONAL = INSERTED.CODIGO_CONJ_FUNC,
@CODIGO_TIPO_MONEDA = INSERTED.CODIGO_TIPO_MONEDA
FROM INSERTED

IF @CODIGO_TIPO_MONEDA = 0
BEGIN
PRINT 'No insertaremos el CF: '+cast(@CONJUNTO_FUNCIONAL as varchar)+
' pq es TIPO_MONEDA es 0'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
END

RETURN

error:
raiserror @errno @errmsg
ROLLBACK TRANSACTION
end
GO


Resulta que en sql server 2000 no tenia ningun problema, pero ahora en 2005 la base de datos reporta a mi aplicacion java un error (al entrar por la parte del if) y en ella lo trato como una excepcion. El error en concreto es:

Error: La transacción terminó en el desencadenador. Se anuló el lote.

¿Existe alguna manera de eliminar este problema sin tener que retocar el codigo del trigger? (tengo varios en mi base de datos que podrian provocar errores de este tipo)

PD: He probado a cambiar el modo compatibilidad de la base de datos a 2000 con sp_dbcmptlevel y no ha resultado.

Un saludo por adelantado y muchas gracias a todos.