Introducción a los triggers o disparadores en sql server para controlar todos los eventos dml en una tabla CONTACTO: informaticonfig@gmail.com COLABORACION: paypal.me/informaticonfig patreon.com/informaticonfig
Пікірлер: 20
@informaticonfig333 Жыл бұрын
Gracias por tu visita y participar en este curso, si te gusta por favor subscríbete, dame tu like y comparte para seguir creciendo y publicando mas lecciones, esto me ayudaría mucho. Tambien para recibir las notificaciones de las nuevas lecciones que iré subiendo paulatinamente CONTACTO: informaticonfig@gmail.com COLABORACION: paypal.me/informaticonfig patreon.com/informaticonfig
@Soonyh Жыл бұрын
Hola, me gustaría dejar mi aporte por si a alguien no le quedo claro (como fue en mi caso en un principio): IF EXISTS (SELECT 0 FROM INSERTED) -> Verifica si existe la tabla INSERTED IF EXISTS (SELECT 0 FROM DELETED) -> Verifica si existe la tabla DELETED -- ES UNA ACTUALIZACION -> Como existen ambas tablas es una actualización ELSE -- ES UNA INSERCION -> Solamente existe INSERTED ELSE -- ES UNA ELIMINACION -> Como no existe INSERTED (por ende no UPDATE), existe DELETED
@informaticonfig333 Жыл бұрын
SELECT 0 FROM INSERTED: Esta consulta se utiliza para devolver un conjunto de resultados que contiene una única columna con el valor 0 para cada fila afectada por la operación de inserción. SELECT 0 FROM DELETED: simplemente devuelve un conjunto de resultados con tantas filas como registros afectados por la eliminación, y cada fila contendrá el valor constante 0 en una única columna.
@maicolaguillon2323 Жыл бұрын
Gracias por el vídeo logré unir varios de mis triggers, ahorrando código y complejidad
@Gonza2432 Жыл бұрын
Excelente video. Me gustan los ejemplos así que no son tán básicos. Gracias
@Crisol_145 ай бұрын
Estoy haciendo el curso completo, excelente contenido. Pero en este ejercicio tarde en entender por qué parecía que los ELSE estaban mal ordenados, deben ir desde el más adentro al más afuera. Gracias a GPT logré entender. En el condicional: if exists (select 0 from inserted), se cumple la condicion cuando SI SE INSERTA la fila, el 0 confunde, pero podría ser 1 y funcionaria igual. De forma análoga el: if exists (select 1 from deleted), se cumple cuando SI se hizo una eliminación. Por ende, cuando se inserta una fila, en el trigger entra al primer condicional y se salta al primer ELSE. Mientras que, cuando se elimina una fila se salta todo el comienzo del código y se va directamente al último ELSE.
@manuelmonzon7089Ай бұрын
disculpa en el minuto 7:16 ... if exists(select 0 from deleted), osea la sentencia if dice que si hay un delete, el mensaje a mostrar no deberia ser se borro ya que delete es eliminar , sin embargo pusistes actualizo en la tabla empleado ???
@informaticonfig333Ай бұрын
hola Manuel, el error es de el mensaje a mostrar, pero la función está correcta, corríjelo tu en tu codigo por favor. Gtacias.
@aromsalas2417 Жыл бұрын
Hola Profe, buen contenido, Estaba intentando armarlo de la forma if exists ... inserted ... 'hizo una inserción' else if exists ... deleted ... 'hizo un borrado' else ... 'hizo una actualizacion' Me funcionó para cuando ejecuté el insert y el delete, pero cuando corro el update me sale 'hizo una inserción', infiero que es porque con esta estructura al ejecutar un update el codigo lo entiende como si fuese un insert también, en ese caso, existe alguna forma de armar el código con esta estructura en la que el update si se reconozca?
@informaticonfig333 Жыл бұрын
hola arom, estas obviando los bloques con el begin y el end, de esa forma el codigo no conoce bien la sintaxis
@jonathanmartinez872 Жыл бұрын
Realmente el problema con tu formula que jamas te funcionara es lo iguiente, solo existen insert o delete, y aqui viene lo curioso, todo update es un insert Y un delete al mismo tiempo, son ambas cosas, por ende si tu pones no es un insert o no es un delete , sera otra cosa, no es posible porque el sistema detecta ah ok entonces es un update pero como un update entra en la categoria de insert puees te jodes no funciona jaja, la logica seria o bien como hace el profesor decir, si cumple ambas condiciones sera un update , y luego si no cumple la segunda condicion en tu caso seria un insert y si no cumple el insert no avanzara al delete por ende si o si sera eliminar , ES CAGAAANTE pero te envio el codigo mio que quizas te ayude igual funciona es innecesariamente mas informacion pero a mi me ayudo a entender mejor if exists (select 0 from inserted) begin if exists (select 0 from deleted) begin insert into control_emple values (SUSER_NAME(), GETDATE(),@hora,'actualizo en la tabla empleados'); end else if exists (select 0 from inserted) begin insert into control_emple values (SUSER_NAME(), GETDATE(),@hora,'inserto en la tabla empleados'); end end else if exists (select 0 from deleted) begin insert into control_emple values (SUSER_NAME(), GETDATE(),@hora,'elimino en la tabla empleados'); end
@esthivencruzayte224111 ай бұрын
@@jonathanmartinez872 fino
@jossizaratepina80246 ай бұрын
Hola, al principio no entendí mucho el video, sin embargo, me gustaria exponer mi logica de como logre entender el ejercicio y fue de la siguiente manera: Primero debemos entender como funcionan las 3 acciones que queremos realizar en nuestra tabla con base a mi logica. ACTUALIZAR REGISTROS = Si no INSERTO registros Y no ELIMINO registros INSERTAR REGISTROS = si INSERTO registros Y no ELIMINO registros ELIMINAR REGISTROS = si ELIMINO registros Y no INSERTO registros ------------------------------------------------------------------------------------------------------------------------- create or alter trigger tr_control_emple on empleados for insert, delete, update as begin declare @hora varchar (20) = right(getdate(),7); -- if exists (select 1 from inserted) and not exists (select 1 from deleted) begin insert into control_emple values ( SUSER_NAME(),GETDATE(),@hora,'Insertó registros') end else if exists (select 1 from deleted) and not exists (select 1 from inserted) begin insert into control_emple values ( SUSER_NAME(),GETDATE(),@hora,'Elimino registros') end else begin insert into control_emple values ( SUSER_NAME(), GETDATE(),@hora,'Actualizó registros') end end;
@informaticonfig3336 ай бұрын
si te funciona como lo nesecitas, perfecto.
@jossizaratepina80246 ай бұрын
@@informaticonfig333 si, complemente
@stephencurry7981 Жыл бұрын
10:53 no cometiste un error profe?? dijiste que si no se cumple la condicion del delete será actualizacion.... En ese caso seria insert, ambas condiciones se tienen que cumplir para que sea update. Si la segunda condicion da false se ejecuta el primer else
@informaticonfig333 Жыл бұрын
hola Stephen, no comprendo al 100% tu duda
@stephencurry7981 Жыл бұрын
que dijiste que para llegar al insert de accion UPDATE. La condicion del delete debe dar false, es decir SI NO HAY DELETE ES UN UPDATE. Eso dijiste, pero, para llegar al insert de la accion update, no deben ser true las dos primeras condiciones? Es decir, si se identificó un insert y un delete, fue un actualizacion..
@eliamgomez2000 Жыл бұрын
@stephencurry7981 creo que el error que menciona se debe a que se equivocó en la explicación, pues dice que si no hay ningún dato en deleted entonces es una actualización, sin embargo, el código es correcto, son detalles menores.
@andrescepeda32459 ай бұрын
comprendo tu duda ya que tambien se me presento, para que te quede claro debes saber. En la primera condicion IF EXISTS (SELECT 0 FROM INSERTED), devuelve un boolean, este verifica si en la La tabla "inserted" existen filas que se han insertado o modificado. si esta se cumple, validara la proxima condicion IF EXISTS (SELECT 0 FROM DELETED), este verifica si en la La tabla "deleted" existen filas que se han eliminado o modificado, si se cumple la condicion quiere decir que modifico un dato en la tabla, ya que si hubiera sido una eliminacion no hubiera leido ese bloque de codigo, y se hubieleeido el ELSE inicial mente. Espero que te ayude esta respuesta.