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

Problemas con un trigger en sql server 2005

Estas en el tema de Problemas con un trigger en sql server 2005 en el foro de SQL Server en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 14/02/2011, 05:15
 
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.
  #2 (permalink)  
Antiguo 14/02/2011, 10:08
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: Problemas con un trigger en sql server 2005

Creo qu estas aplicando mas las reglas de programacion, si vas a VERIFICAR algo, debe ser en el cuerpo del STORE PROCEDURE y no en un TRIGGER que fue diseñado para otras cuestiones, como la INTEGRIDAD REFERENCIAL.

Seguramente tu "migracion", fue un simple, backup-restore y no aplicaste ni siquiera el UPGRADE ADVISOR, de lo contratrio te hubiera informado de este tipo de incompatibilidades.

El mantener el nivel de compatibilidad en 80, es como traer una carroceria de BMW y motor de VW.

Saludos
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 15/02/2011, 01:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Problemas con un trigger en sql server 2005

OK utilizaré el upgrade advisor para ver si veo algo "especial", pero me gustaria saber pq se esta dando este problema y si es posible solucionarlo, pq realmente no veo que es lo que tengo mal en mi trigger. Es una simple transaccion que se hace commit si todo va ok y rollback en caso contrario.

Un saludo.

PD: El cambio de nivel de compatibilidad era simplemente para ver si el error dejaba de producirse, pero ya veo que no se trata de una compatibilidad completa.

Muchas gracias.

Etiquetas: server, sql, trigger
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 05:34.