Trigger y cancelación de operación en curso.

25/07/2003 - 10:41 por AC | Informe spam
Buenos días,

Tengo una duda respecto a como cancelar la operación en curso en el trigger
que ha desencadenado.
Una forma creo sería RAISERROR que generaría un error, une mensaje para el
usuario y cancelaría la operación. ¿ Es correcto?
Si no se quiere ningún mensaje de error, ¿cómo se puede cancelar la
operación en curso dentro del trigger?

Gracias de antemano, y saludos.

Preguntas similare

Leer las respuestas

#6 AC
25/07/2003 - 20:55 | Informe spam
Gracias por el interés, por las respuestas y por el ejemplo.
Vistas vuestras recomendaciones de precaución de uso del ROLLBACK en
triggers, seguramente hay algo que no he entendido, porque a pesar del
ejemplo no acabo de ver los problemas que puede reportar.
Seguramente es un problema mío, por lo que agradecería si me pudieseis dar
una referencia de alguna documentación al respecto.

Gracias de antemano.

"Miguel Egea" escribió en el mensaje
news:
Mostrar la cita
varchar)
Mostrar la cita
el
Mostrar la cita
#7 Javier Loria\(MVP\)
28/07/2003 - 20:21 | Informe spam
Hola Miguel:
Tal vez no entiendo lo que dices, pero asumiendo que el procedimiento
que invoca la modificacion usa transacciones, NO deberia tener problema con
la transaccion ya que el Trigger hace un ROLLBACK de SU TRANSACCION que esta
ANIDADA dentro de la Transancaccion del Procedimiento lo que significa que
TODA esta transaccion queda anulada.
Lo que si comparto es que el codigo despues del ROLLBACK dentro del
TRIGGER queda fuera de la Transaccion, y por lo que crea su propia
transaccion que es independiente de la del Procedimiento que ya esta
cancelada.

Un ejemplo:
/* Inicio de Codigo */
DROP TABLE PRUEBATRIGGER
CREATE TABLE PruebaTrigger(
Id INT NOT NULL PRIMARY KEY
)
GO

CREATE TRIGGER InsPruebaTrigger
ON PruebaTrigger
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
IF EXISTS (SELECT ID FROM INSERTED WHERE Id=1)
BEGIN
RAISERROR ('ID 1 NO es Permitido', 16, 10)
END
IF EXISTS (SELECT ID FROM INSERTED WHERE Id=2)
BEGIN
ROLLBACK
END
IF EXISTS (SELECT ID FROM INSERTED WHERE Id=3)
BEGIN
ROLLBACK
RAISERROR ('ID 3 NO es Permitido', 16, 10)
END
IF EXISTS (SELECT ID FROM INSERTED WHERE Id=4)
BEGIN
ROLLBACK
INSERT PruebaTrigger
VALUES (100)
END
END
GO

BEGIN TRAN
INSERT PruebaTrigger
VALUES (1)
INSERT PruebaTrigger
VALUES (11)
COMMIT
GO
SELECT * FROM PruebaTrigger
GO
BEGIN TRAN
INSERT PruebaTrigger
VALUES (2)
INSERT PruebaTrigger
VALUES (12)
COMMIT
GO
SELECT * FROM PruebaTrigger
GO
BEGIN TRAN
INSERT PruebaTrigger
VALUES (3)
INSERT PruebaTrigger
VALUES (13)
COMMIT
GO
SELECT * FROM PruebaTrigger
GO

BEGIN TRAN
INSERT PruebaTrigger
VALUES (4)
INSERT PruebaTrigger
VALUES (14)
COMMIT
SELECT * FROM PruebaTrigger

/* Fin de Codigo */

Saludos,



Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Mostrar la cita
Ads by Google
Search Busqueda sugerida