Trigger

27/10/2003 - 23:03 por Julio | Informe spam
Hola Grupo

Como puedo hacer un trigger para que se me dispare cuando se haga un insert
en un campo si existe otro que esta null,
es decir Si tengo los campos llamados fecha inicial y fecha final. Quiero
que el trigger se me dispare si el campo fecha inical lo dejan nulo y solo
quieran instroducir informacion en fecha final.
Lo que busco con esto es que no me dejen fecha inicial en blanco y que fecha
final dependa de fecha inical.

Preguntas similare

Leer las respuestas

#6 Javier Loria
28/10/2003 - 16:53 | Informe spam
Hola Juan Manuel:
Un par de comentarios,
Y que ocurre al Trigger cuando se insertan varias filas?,
El Raise Error envia un error, pero no evita la transaccion!!!
En detalle:
Trigger con varias Filas
=La Tabla Inserted es una Tabla no una fila, y es peligroso tratarla como
fila. Si quieres revisar que no haya nulos en INSERTED, debes hacer algo
como:

IF EXISTS( SELECT * FROM INSERTED WHERE Campo IS NULL)

Como manejar el Error
Te envio el codigo de un Trigger basado en un ejemplo de Miguel que me
parece es autoexplicativo.

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
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.




Juan Manuel escribio:
Julio:
Con respecto a la ejecución no podés hacer nada, el
tema es que dentro del Trigger podés tenér logica como en
un Stored Procedure que valide lo que querés hacer.

Por ejemplo si querés que el trigger cancele si tenes
algun dato en nulo podría tener la siguiente estructura.

CREATE TRIGGER TI_TABLA ON dbo.TABLA
FOR INSERT
AS
DECLARE @ESNULL AS CHAR(1)

SELECT @ESNULL = ISNULL(CAMPO,'S')
FROM INSERTED

IF @ESNULL = 'S'
RAISEERROR('TENGO UN CAMPO NULO',1,1)

GO





Maximiliano,

Durante la ejecución de un trigger siempre te encuentras dentro de
una transacción. Incluso cuando el programa no ha solicitado una
trasacción manualmente, SQL Server siempre crea una transacción para
proteger cualquier modificación de la base de datos, previniendo así
posibles problemas de consistencia de datos.

Saludos

Fernando G. Guerrero
SQL Server MVP
CEO & Principal Mentor
Solid Quality Learning
www.solidqualitylearning.com

"Comparte lo que sabes, aprende lo que no sepas"

"Maximiliano Accotto" wrote in message
news:
Mira los trigger no se disparan asi
El tema es asi.

Un trigger se dispara cuando hacer una instruccion por ej: Insert,
update o Delete.

Tu trigger quizas debas usarlo para instrucciones insert

Dentro del mismo deberias hacerlo con transacciones ya que si no
cumple con tu regla de negocios es muy probable que quieras que se
aborte la instruccion insert.

Entonces cada vez q un user haga un unsert a tu tabla se dispararan
todos los trigger que has establecido para ello.

Un abrazo






ACCOTTO MAXIMILIANO DAMIAN
ESPECIALISTA EN SISTEMAS INFORMATICOS

UN SALUDO MUY CORDIAL
"Julio" escribió en el mensaje
news:
Hola Grupo

Como puedo hacer un trigger para que se me dispare cuando se haga
un insert en un campo si existe otro que esta null,
es decir Si tengo los campos llamados fecha inicial y fecha final.
Quiero que el trigger se me dispare si el campo fecha inical lo
dejan nulo y solo quieran instroducir informacion en fecha final.
Lo que busco con esto es que no me dejen fecha inicial en blanco y
que fecha final dependa de fecha inical.











.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida