-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTriggers.sql
180 lines (180 loc) · 4.24 KB
/
Triggers.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
-- C--
-- 1
-- Triggers that satisfy the condition of deleting a topic will delete related information
GO
CREATE TRIGGER DELETE_DETAI
ON DETAI
INSTEAD OF DELETE
AS
BEGIN
DECLARE @MSDT CHAR(6)
SELECT @MSDT=MSDT FROM deleted
DELETE FROM SV_DETAI
WHERE MSDT=@MSDT
DELETE FROM GV_HDDT
WHERE MSDT=@MSDT
DELETE FROM GV_PBDT
WHERE MSDT=@MSDT
DELETE FROM GV_UVDT
WHERE MSDT=@MSDT
DELETE FROM HOIDONG_DT
WHERE MSDT=@MSDT
PRINT 'DA XOA CAC THONG TIN LIEN QUAN!'
END
-- THUC THI
DELETE DETAI
WHERE MSDT='97001'
-- 2
-- The trigger satisfies the constraint that an assembly has no more than 10 topics
GO
CREATE TRIGGER TRIG_INSERT_HD_DT_SLDT
ON HOIDONG_DT
FOR INSERT
AS
BEGIN
IF (SELECT COUNT (*)
FROM INSERTED, HOIDONG_DT
WHERE INSERTED.MSHD = HOIDONG_DT.MSHD) > 3
BEGIN
ROLLBACK TRANSACTION
RAISERROR (N'MỘT HD KHÔNG QUÁ 10 ĐỀ TÀI', 16, 1)
RETURN
END
END
INSERT INTO HOIDONG_DT VALUES (1, '97003', 'Duoc')
INSERT INTO HOIDONG_DT VALUES (2, '97006', 'Duoc')
-- 3
-- Trigger that satisfies constraints is a topic of no more than 3 students
GO
CREATE TRIGGER TRIG_INSERT_DT_SLSV
ON SV_DETAI
AFTER INSERT, UPDATE
AS
BEGIN
DECLARE @MSDT CHAR(6)
SELECT @MSDT=MSDT FROM inserted
IF (SELECT COUNT(*) FROM SV_DETAI WHERE MSDT=@MSDT)>3
BEGIN
ROLLBACK TRANSACTION
RAISERROR ('MOT DE TAI KHONG QUA 3 SINH VIEN!', 16, 1)
END
END
-- 4
-- Trigger satisfies the constraint that a teacher who wants an associate professor degree must have a doctorate
GO
CREATE TRIGGER TRIG_UPDATE_GV_PGS
ON GIAOVIEN
FOR UPDATE
AS
BEGIN
IF EXISTS(
SELECT *
FROM inserted T
JOIN GIAOVIEN GV ON I.MSGV=GV.MSGV
JOIN GV_HV_CN ON I.MSGV=GV_HV_CN.MSGV
WHERE I.MSGV=1 AND GV_HV_CN.MSHV <>1 )
BEGIN
RAISERROR ('GIAO VIEN MUON LA PGS PHAI LA TIEN SI TRUOC!', 16, 1)
ROLLBACK TRANSACTION
END
END
--5
--Trigger satisfies The teacher who is the chairman of the council must have a doctorate degree
-- Ràng buộc thao tác xóa trên bảng GV_HV_CN
CREATE TRIGGER TRIG_DELETE_GV_HV_CN
ON GV_HV_CN
FOR DELETE
AS
BEGIN
DECLARE @MSGV INT
SELECT @MSGV = MSGV FROM deleted
IF(SELECT MSHV FROM GV_HV_CN WHERE MSGV = @MSGV) = 4
BEGIN
ROLLBACK TRANSACTION
RAISERROR(N'GIÁO VIÊN LÀ CHỦ TỊCH HỘI ĐỒNG PHẢI CÓ HỌC VỊ TIẾN SĨ',16,1)
RETURN
END
END
GO
-- Check trigger
DELETE FROM GV_HV_CN
WHERE MSGV = '201' AND MSCN = '2'
-- Ràng buộc thao tác sửa trên bảng GV_HV_CN
CREATE TRIGGER TRIG_UPDATE_GV_HV
ON GV_HV_CN
FOR UPDATE
AS
BEGIN
DECLARE @MSGV INT
DECLARE @MSHV INT
SELECT @MSGV = MSGV FROM inserted
SELECT @MSHV = MSHV FROM inserted
IF(SELECT MSHV FROM GV_HV_CN WHERE MSGV = @MSGV)= 4 AND @MSHV != 4
BEGIN
ROLLBACK TRANSACTION
RAISERROR(N'GIÁO VIÊN LÀ CHỦ TỊCH HỘI ĐỒNG PHẢI CÓ HỌC VỊ TIẾN SĨ',16,1)
RETURN
END
END
GO
-- CHECK
UPDATE GV_HV_CN
SET MSHV = 3 WHERE MSGV = '201' AND MSCN = '2'
-- Ràng buộc thao tác sửa trên bảng HOCVI
CREATE TRIGGER TRIG_UPDATE_HV
ON HOCVI
FOR UPDATE
AS
BEGIN
DECLARE @MSHV INT
DECLARE @TENHV NVARCHAR(20)
SELECT @MSHV = MSHV FROM inserted
SELECT @TENHV = TENHV FROM inserted
IF @MSHV= 4 AND (SELECT TENHV FROM HOCVI WHERE MSHV = @MSHV) != 'Tiến sĩ'
BEGIN
ROLLBACK TRANSACTION
RAISERROR(N'GIÁO VIÊN LÀ CHỦ TỊCH HỘI ĐỒNG PHẢI CÓ HỌC VỊ TIẾN SĨ',16,1)
RETURN
END
END
GO
-- Check
UPDATE HOCVI
SET TENHV = 'Kỹ sư' WHERE MSHV = 4
-- Ràng buộc thao tác thêm trên bảng HOIDONG
CREATE TRIGGER TRIG_INSERT_HOIDONG
ON HOIDONG
FOR INSERT
AS
BEGIN
DECLARE @MSGV INT
SELECT @MSGV = MSGV FROM inserted
IF (SELECT MSHV FROM GV_HV_CN WHERE MSGV = @MSGV) != 4
BEGIN
ROLLBACK TRANSACTION
RAISERROR(N'GIÁO VIÊN LÀ CHỦ TỊCH HỘI ĐỒNG PHẢI CÓ HỌC VỊ TIẾN SĨ',16,1)
RETURN
END
END
GO
--CHECK
INSERT INTO HOIDONG (MSHD, PHONG, TGBD, NGAYHD, TINGTRANG, MSGV) VALUES ('4', '003', '8:00', '6/12/2014', 'That', '204')
-- Ràng buộc thao tác xóa trên bảng GV_HV_CN
CREATE TRIGGER TRIG_UPDATE_HOIDONG
ON HOIDONG
FOR UPDATE
AS
BEGIN
DECLARE @MSGV INT
SELECT @MSGV = MSGV FROM inserted
IF (SELECT MSHV FROM GV_HV_CN WHERE MSGV = @MSGV) != 4
BEGIN
ROLLBACK TRANSACTION
RAISERROR(N'GIÁO VIÊN LÀ CHỦ TỊCH HỘI ĐỒNG PHẢI CÓ HỌC VỊ TIẾN SĨ',16,1)
RETURN
END
END
GO
--CHECK
UPDATE HOIDONG
SET MSGV = 204 WHERE MSHD = 3