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

Trigger before

Estas en el tema de Trigger before en el foro de SQL Server en Foros del Web. Hola a todos. Soy un poco nuevo en la programacion en SQL server, y quiero realizar un un trigger before pero buscando en la red ...
  #1 (permalink)  
Antiguo 02/09/2012, 20:42
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 14 años, 7 meses
Puntos: 0
Información Trigger before

Hola a todos.

Soy un poco nuevo en la programacion en SQL server, y quiero realizar un un trigger before pero buscando en la red no encuentro informacion del mismo, creo que nada mas existe el after, saber como le puedo hacer para tener un trigger befor?

Gracias!
  #2 (permalink)  
Antiguo 03/09/2012, 02:33
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Trigger before

No estoy seguro, pero segun lo que yo recuerdo el trigger esta definido por defecto como After Trigger,
y la otra opción es el Instead of Trigger que es antes y en cambio (la instrucción original).

Si esta es la situación- el Instead of Trigger debe incluir el "Before" y la instrucción original en si.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 03/09/2012, 13:51
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Trigger before

Cita:
Iniciado por GeriReshef Ver Mensaje
No estoy seguro, pero segun lo que yo recuerdo el trigger esta definido por defecto como After Trigger,
y la otra opción es el Instead of Trigger que es antes y en cambio (la instrucción original).

Si esta es la situación- el Instead of Trigger debe incluir el "Before" y la instrucción original en si.
Tengo una duda, me comentas que "Instead of" se ejecuta antes de la instruccion que desencadeno el disparador. Pero por lo poco que he leido en los foros lo que entonedo es que elimina la instruccion que inicio el disparador por lo que pongas en el trigger y solo ejecuta lo que esta en el cuerpo de "Instead of" eliminando el insert,update o delete. ¿Que hay de cierto en eso que yo estoy entendiendo?
  #4 (permalink)  
Antiguo 03/09/2012, 14:00
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Trigger before

Tienes razon: Instead of.. = En lugar de..
He escrito "antes y en cambio" para enfatizar porque "instead of" es opuesto a "After".

Como has mencionado el "instead of" elimina el Insert / Update / Delete segun su definicion (se puede crear "Instead of" solo a Insert por ejmplo, para que no influya los otros).
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 03/09/2012, 14:22
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Trigger before

Ok gracias por contestar, pero entonces mi pregunta es, existe algo que sea contrario a AFTER,

Ahora que me dices eso me puse a pensar, (actualmente no tengo sql server uy no puedo hacer la prueba) se puede crear un trigger con "instead of" que inserte nuevamente en la tabla que disparo ese prosedimiento. claro que suena a que se quedara pasmado pero como soy nuevo pues por eso me atrevo a preguntar, se podria sin que se haga un loop infinito?
  #6 (permalink)  
Antiguo 03/09/2012, 15:18
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: Trigger before

Definitivamente, no podrias hacer un trigger que afectara la misma tabla de donde se disparo dicho trigger.
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 03/09/2012, 18:06
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Trigger before

Cita:
Iniciado por iislas Ver Mensaje
Definitivamente, no podrias hacer un trigger que afectara la misma tabla de donde se disparo dicho trigger.
Jajajaja me lo imagine, entonces como podria hacer un trigger con BEFORE?? lo que se me hace raro es que MySQL lo tiene, Oracle lo tiene, PostgreSQL lo tiene. Se me hace increible que SQL Server no lo tenga.

Alguna idea o algo???
  #8 (permalink)  
Antiguo 03/09/2012, 22:50
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Trigger before

Hola a todos!!

Alguna idea para poder hacer un trigger con before??

o alguna instrucción??

No he podido darle la vuelta y estoy desespeado!!!
  #9 (permalink)  
Antiguo 03/09/2012, 23:46
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Trigger before

Calakra- te adjunto, especialmente para ti, un ejemplo.
Primero que nada crearemos dos tablas,
y un Instead of Trigger en la primera que se comporta como un Before Insert:
Código SQL:
Ver original
  1. CREATE TABLE T1(ID INT IDENTITY PRIMARY KEY, MiColumna VARCHAR(MAX));
  2. CREATE TABLE T2(ID INT IDENTITY PRIMARY KEY, MiColumna VARCHAR(MAX));
  3. GO
  4.  
  5. CREATE TRIGGER Trg_T1 ON T1
  6.     Instead OF INSERT AS
  7. INSERT
  8. INTO    T2
  9. SELECT  MiColumna
  10. FROM    Inserted;
  11. INSERT
  12. INTO    T1
  13. SELECT  MiColumna
  14. FROM    Inserted;
  15. GO
Ahora insertaremos una fila a T1,
y el Instead of Trigger le va a insertar primero a T2 y solamente despues a T1:
Código SQL:
Ver original
  1. INSERT INTO T1 SELECT 'Hola mundo!';
  2.  
  3. SELECT * FROM T1;
  4. SELECT * FROM T2;
Espero que te sirva de ayuda!
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Etiquetas: 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 11:17.