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

Usar una subconsulta dentro de un disparador?

Estas en el tema de Usar una subconsulta dentro de un disparador? en el foro de SQL Server en Foros del Web. Hola, estoy haciendo una guia de subconsultas y disparadores en SQL Server. Y me he quedado atorado en este problema, se me pide crear un ...
  #1 (permalink)  
Antiguo 04/10/2015, 11:50
 
Fecha de Ingreso: febrero-2014
Mensajes: 3
Antigüedad: 10 años, 2 meses
Puntos: 0
Pregunta Usar una subconsulta dentro de un disparador?

Hola, estoy haciendo una guia de subconsultas y disparadores en SQL Server. Y me he quedado atorado en este problema, se me pide crear un disparador que impida eliminar a los empleados que hayan ingresado más de 5 donaciones.

Como no conosco el numero de donaciones registradas por el empleado a eliminar he intentando usando una subconsulta tomando el valor del id del empleado y preguntando en cuantas donaciones tienen asociado ese id, pero al parecer no me regresa el dato que quiero. Por lo que lo eliminia de todos modos.
Código SQL:
Ver original
  1. CREATE TRIGGER empleados5donaciones ON empleados FOR DELETE AS
  2. DECLARE @idEmp INT
  3. SELECT @idEmp=idempleado FROM deleted
  4. IF ((SELECT COUNT(*) FROM donaciones WHERE donaciones.idempleado=@idEmp)>5)
  5. BEGIN
  6.     PRINT 'El empleado ha registrado mas de 5 donaciones, no se puede eliminar.'
  7.     ROLLBACK TRANSACTION
  8. END
Tambien lo intente sin usar la variable.
Código SQL:
Ver original
  1. CREATE TRIGGER empleados5donaciones ON empleados FOR DELETE AS
  2. IF ((SELECT COUNT(*) FROM donaciones WHERE donaciones.idempleado=(SELECT idempleado FROM deleted))>5)
  3. BEGIN
  4.     PRINT 'El empleado ha registrado mas de 5 donaciones, no se puede eliminar.'
  5.     ROLLBACK TRANSACTION
  6. END

Última edición por gnzsoloyo; 05/10/2015 a las 10:14
  #2 (permalink)  
Antiguo 05/10/2015, 09:46
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: Usar una subconsulta dentro de un disparador?

Los datos temporales se guardan en tablas de paso que son INSERTED y UPDATED, si no mal recuerdo.

Asi es que la variable que manejas @idEmp, no trae informacion.

Checa esto en GOOGLE, CREATE TRIGGER
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 05/10/2015, 12:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Usar una subconsulta dentro de un disparador?

La consulta esta bien, esta usando la tabla deleted(las que existen son inserted y deleted amigo iislas acuerdese que un update es un delte con insert) ahora cual es el error que tienes??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 05/10/2015, 14:26
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: Usar una subconsulta dentro de un disparador?

Cita:
Iniciado por Libras Ver Mensaje
La consulta esta bien, esta usando la tabla deleted(las que existen son inserted y deleted amigo iislas acuerdese que un update es un delte con insert) ahora cual es el error que tienes??
Muchas gracias por la corrección amigo Libras y cito a los libros en línea:

Los desencadenadores DML usan las tablas lógicas (conceptuales) deleted e inserted. Son de estructura similar a la tabla en que se define el desencadenador, es decir, la tabla en que se intenta la acción del usuario. Las tablas deleted e inserted guardan los valores antiguos o nuevos de las filas que la acción del usuario puede cambiar. Por ejemplo, para recuperar todos los valores de la tabla deleted, utilice:

Código SQL:
Ver original
  1. SELECT *
  2. FROM deleted
https://technet.microsoft.com/es-es/...=sql.105).aspx
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 06/10/2015, 14:31
 
Fecha de Ingreso: octubre-2015
Ubicación: Sinaloa
Mensajes: 8
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Usar una subconsulta dentro de un disparador?

Prueba con:

Código SQL:
Ver original
  1. IF EXISTS (SELECT COUNT(*) FROM donaciones WHERE donaciones.idempleado=@idEmp HAVING COUNT(*) >5)
  2. BEGIN
  3.     PRINT 'El empleado ha registrado mas de 5 donaciones, no se puede eliminar.'
  4.     ROLLBACK TRANSACTION
  5. END
Espero te sirva, saludos!!

Última edición por gnzsoloyo; 06/10/2015 a las 14:38

Etiquetas: disparadores, sql-server-2008, subconsultas
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 15:25.