[4sem] add db course files
This commit is contained in:
parent
ea29f4148d
commit
827b74f0b4
13 changed files with 1087 additions and 0 deletions
56
4sem/db/lab13.sql
Normal file
56
4sem/db/lab13.sql
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
DROP TRIGGER IF EXISTS dbo.NoDeleteUsedDiscipline;
|
||||
DROP TRIGGER IF EXISTS dbo.NoSetWrongCaptain;
|
||||
DROP TRIGGER IF EXISTS dbo.NoInsertWrongExam;
|
||||
GO;
|
||||
|
||||
CREATE TRIGGER dbo.NoDeleteUsedDiscipline ON [Дисциплина] INSTEAD OF DELETE AS BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @d_discID TABLE (DISC INT);
|
||||
INSERT INTO @d_discID(DISC) SELECT ID FROM DELETED;
|
||||
|
||||
IF EXISTS(SELECT * FROM [Изучение] AS L WHERE EXISTS(SELECT * FROM @d_discID WHERE DISC = L.[Дисциплина])) BEGIN
|
||||
RAISERROR ('Deletion is not allowed: discipline is in use', 16, 1);
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DELETE FROM [Дисциплина] WHERE EXISTS(SELECT * FROM @d_discID WHERE DISC = ID);
|
||||
END;
|
||||
GO;
|
||||
|
||||
CREATE TRIGGER dbo.NoSetWrongCaptain ON [Группа] AFTER UPDATE AS BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @c_groupID TABLE (GRP INT, NCPT INT);
|
||||
INSERT INTO @c_groupID(GRP, NCPT) SELECT ID, INSERTED.[ЗачётнаяКнижкаСтаросты] FROM INSERTED;
|
||||
|
||||
IF UPDATE([ЗачётнаяКнижкаСтаросты]) AND EXISTS(SELECT * FROM [Студент] AS S WHERE EXISTS(SELECT * FROM @c_groupID WHERE GRP = S.[Группа] AND S.[НомерЗачетнойКнижки] = NCPT))
|
||||
RETURN;
|
||||
|
||||
RAISERROR ('New captain not from this group', 16, 1);
|
||||
END;
|
||||
GO;
|
||||
|
||||
CREATE TRIGGER dbo.NoInsertWrongExam ON [Изучение] AFTER INSERT AS BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @i_learnID TABLE (SID INT, DID INT);
|
||||
INSERT INTO @i_learnID(SID, DID) SELECT INSERTED.Студент, INSERTED.Дисциплина FROM INSERTED;
|
||||
|
||||
IF EXISTS(SELECT * FROM [Студент] AS S
|
||||
JOIN [Группа] AS G on S.[Группа] = G.ID
|
||||
RIGHT JOIN [Дисциплина] AS D on D.[КодСпециальности] = G.[КодСпециальности]
|
||||
WHERE EXISTS(SELECT * FROM @i_learnID WHERE SID = S.[НомерЗачетнойКнижки] AND D.ID = DID))
|
||||
RETURN;
|
||||
|
||||
RAISERROR ('Student is not learning that discipline', 16, 1);
|
||||
END;
|
||||
GO;
|
||||
|
||||
BEGIN TRANSACTION
|
||||
|
||||
DELETE FROM [Дисциплина] WHERE ID = 33;
|
||||
UPDATE [Группа] SET [Группа].[ЗачётнаяКнижкаСтаросты] = 25 WHERE ID = 4;
|
||||
INSERT INTO [Изучение]([Студент], [Дисциплина], [Дата], [Оценка]) VALUES (13, 9, '2020-09-05', 1);
|
||||
|
||||
ROLLBACK TRANSACTION
|
||||
Loading…
Add table
Add a link
Reference in a new issue