Advertisement
jacket410

Untitled

May 17th, 2022
674
141 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. USE Decanate;
  2.  
  3. /*При удалении некоторой дисциплины, триггер не дает удалить дисциплины, по
  4. которым хотя бы один человек получил экзамен (зачет).*/
  5. DROP TRIGGER IF EXISTS disciplineDelete;  
  6. GO
  7.  
  8. CREATE TRIGGER disciplineDelete
  9. ON Discipline INSTEAD OF DELETE
  10. AS
  11. IF (
  12. SELECT count(Score.FK_Discipline_id)
  13. FROM Score
  14. WHERE Score.FK_Discipline_id IN
  15. (SELECT id
  16. FROM deleted)
  17. ) <> 0
  18. BEGIN
  19.     ROLLBACK TRAN
  20.     PRINT N'This discipline can not be removed'
  21. END
  22. GO
  23.  
  24. DELETE FROM Discipline 
  25.     WHERE id = 1;
  26. GO
  27.  
  28. /*Назначить нового старосту в некоторую группу. Если назначаемый на должность
  29. старосты студент не состоит в этой группе, следует отменить транзакцию.*/
  30.  
  31. DROP TRIGGER IF EXISTS captain_zach;  
  32. GO
  33.  
  34. CREATE TRIGGER captain_zach
  35.     ON SGroup
  36.         FOR UPDATE
  37.             AS
  38.     BEGIN
  39.     IF (
  40.     SELECT inserted.captain_zach
  41.     FROM inserted
  42.     )
  43.     NOT IN
  44.     (
  45.     SELECT Student.num_zach
  46.     FROM Student
  47.     WHERE Student.FK_SGroup_id in
  48.     (SELECT inserted.id
  49.     FROM inserted)
  50.     )
  51.     BEGIN
  52.         ROLLBACK TRAN
  53.         PRINT N'Student is not in the target group'
  54.     END
  55. END
  56.  
  57. GO
  58.  
  59. UPDATE SGroup
  60. SET SGroup.captain_zach = 180612
  61. WHERE SGroup.id = 3
  62. GO
  63.  
  64. /*Не позволить добавить информацию о сданном экзамене (или зачете), если
  65. дисциплина не соответствует специальности студента.*/
  66. DROP TRIGGER IF EXISTS insert_score_info;  
  67. GO
  68.  
  69. CREATE TRIGGER insert_score_info
  70.     ON Score
  71.     FOR INSERT
  72.     AS
  73.     BEGIN
  74.     IF (
  75.     SELECT sd.FK_Specialty_id
  76.     FROM SpecialtyDiscipline sd
  77.         JOIN Discipline d ON sd.FK_Discipline_id = d.id
  78.         JOIN Inserted i ON i.FK_Discipline_id = d.id
  79.     )
  80.     <>
  81.     (
  82.     SELECT sg.FK_Specialty_id
  83.     FROM SGroup sg
  84.     WHERE sg.id =
  85.     (
  86.     SELECT s.FK_SGroup_id
  87.     FROM Student s
  88.         JOIN Inserted i ON s.num_zach = i.FK_Student_num_zach
  89.     )
  90.     )
  91.         BEGIN
  92.         ROLLBACK TRAN
  93.         PRINT N'This score can not be added'
  94.     END
  95. END
  96.  
  97. GO
  98.  
  99. INSERT Score
  100. VALUES
  101.     (180611, 6, '2018-12-29', N'Хор');
  102. GO
  103.  
Advertisement
RAW Paste Data Copied
Advertisement