Principales respuestas
Necesito ayuda con los triggers

Pregunta
-
Supuestamente hay 2 tipos "AFTER" y "INSTEAD OF" pero para que es el "FOR"?.
Cuando eliminas un registro se crea la tabla temporal "deleted" y cuando insertas se crea "inserted" pero cuando actualizas que pasa? si quiere acceder a los campos antiguos del registros?, es decir, aquellos campos que estaban antes de producirse la actualización?
Agradecería unos ejemplos, saludos
- Cambiado Karen MalagónModerator lunes, 3 de agosto de 2015 17:30 SQL Server issue
Respuestas
-
for y after hacen lo mismo. Cuando actualizas SQL server asemeja a un delete mas un insert es decir se llenan ambas pseudotablas, delete contiene los valores antes de la actualización, inserted los posteriores.
IF OBJECT_ID ('Sales.reminder2','TR') IS NOT NULL DROP TRIGGER Sales.reminder2; GO CREATE TRIGGER reminder2 ON Sales.Customer AFTER INSERT, UPDATE, DELETE AS begin if ( select count(*) from inserted=0) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'AdventureWorks2012 Administrator', @recipients = 'danw@Adventure-Works.com', @body = 'Don''t forget to print a report for the sales force. Deleted orderd', @subject = 'Reminder'; if ( select count(*) from deleted=0) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'AdventureWorks2012 Administrator', @recipients = 'danw@Adventure-Works.com', @body = 'Don''t forget to print a report for the sales force. inserted orderd', @subject = 'Reminder'; if (( select count(*) from inserted>0) and ( select count(*) from deleted>0) ) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'AdventureWorks2012 Administrator', @recipients = 'danw@Adventure-Works.com', @body = 'Don''t forget to print a report for the sales force. updated orderd', @subject = 'Reminder'; GO
Comparte lo que sepas, aprende lo que no sepas (FGG)
portalSQL
El rincón del DBA- Propuesto como respuesta Karen MalagónModerator martes, 4 de agosto de 2015 19:56
- Marcado como respuesta Karen MalagónModerator miércoles, 5 de agosto de 2015 22:27
Todas las respuestas
-
Hola AnalistaStr,
Por favor, apoya a guardar orden en el foro. Ya te han mencionado que existe una sección en este foro para SQL Server donde podrás colocar todas tus dudas, este es una sección para ASP Net. En la sección SQL Server encontrarás muchos expertos gustosos en apoyarte.
- Editado Willams Morales sábado, 1 de agosto de 2015 17:36
-
Hola AnalistaStr
Como te comenta Willams Morales el foro de SQL SERVER de MSDN es
https://social.msdn.microsoft.com/Forums/es-ES/home?forum=sqlserveres
Entonces pudes publicar alli tu dudas sobre esta producto/tecnologia (igualmente algun moderador moverá este post a dicho foro por tratarse de esta temantica) pero recuerda para tu proxima duda o inquietudPor lo pronto, puedes comenzar a leer en la ayuda de MSDN sobre Trigger que te explica
- CREATE TRIGGER (Transact-SQL)
https://msdn.microsoft.com/es-es/library/ms189799.aspx
Donde veras que FOR es simplemente igual a AFTER, es indistinto
(...)AFTER es el valor predeterminado cuando solo se especifica la palabra clave FOR.(...)Espero que te sirva de ayuda o guia
Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
- CREATE TRIGGER (Transact-SQL)
-
-
for y after hacen lo mismo. Cuando actualizas SQL server asemeja a un delete mas un insert es decir se llenan ambas pseudotablas, delete contiene los valores antes de la actualización, inserted los posteriores.
IF OBJECT_ID ('Sales.reminder2','TR') IS NOT NULL DROP TRIGGER Sales.reminder2; GO CREATE TRIGGER reminder2 ON Sales.Customer AFTER INSERT, UPDATE, DELETE AS begin if ( select count(*) from inserted=0) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'AdventureWorks2012 Administrator', @recipients = 'danw@Adventure-Works.com', @body = 'Don''t forget to print a report for the sales force. Deleted orderd', @subject = 'Reminder'; if ( select count(*) from deleted=0) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'AdventureWorks2012 Administrator', @recipients = 'danw@Adventure-Works.com', @body = 'Don''t forget to print a report for the sales force. inserted orderd', @subject = 'Reminder'; if (( select count(*) from inserted>0) and ( select count(*) from deleted>0) ) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'AdventureWorks2012 Administrator', @recipients = 'danw@Adventure-Works.com', @body = 'Don''t forget to print a report for the sales force. updated orderd', @subject = 'Reminder'; GO
Comparte lo que sepas, aprende lo que no sepas (FGG)
portalSQL
El rincón del DBA- Propuesto como respuesta Karen MalagónModerator martes, 4 de agosto de 2015 19:56
- Marcado como respuesta Karen MalagónModerator miércoles, 5 de agosto de 2015 22:27