-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTrigger.sql
188 lines (160 loc) · 4.28 KB
/
Trigger.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
181
182
183
184
185
186
187
188
USE QLBH
---I.10
CREATE TRIGGER TRG_KH_IN
ON KHACHHANG
FOR INSERT
AS
BEGIN
DECLARE @NGAYSINH SMALLDATETIME, @NGAYDK SMALLDATETIME, @KHACHHANG VARCHAR(4)
SELECT @NGAYDK = NGDK, @KHACHHANG=MAKH FROM inserted
SELECT @NGAYSINH=NGSINH FROM KHACHHANG
WHERE MAKH=@KHACHHANG
IF(@NGAYSINH>@NGAYDK)
BEGIN
PRINT('LOI')
ROLLBACK TRANSACTION
END
END
CREATE TRIGGER TRG_KH_UP
ON KHACHHANG
FOR UPDATE
AS
BEGIN
DECLARE @NGAYSINH SMALLDATETIME, @NGAYDK SMALLDATETIME, @KHACHHANG VARCHAR(4)
SELECT @NGAYDK = NGDK, @KHACHHANG=MAKH FROM inserted
SELECT @NGAYSINH=NGSINH FROM KHACHHANG
WHERE MAKH=@KHACHHANG
IF(@NGAYSINH>@NGAYDK)
BEGIN
PRINT('LOI')
ROLLBACK TRANSACTION
END
END
-- 11. Ngày mua hàng (NGHD) của một khách hàng thành viên sẽ lớn hơn hoặc bằng ngày khách hàng đó đăng ký thành viên (NGDK).
CREATE TRIGGER TRG_HD_KH ON HOADON FOR INSERT
AS
BEGIN
DECLARE @NGHD SMALLDATETIME, @NGDK SMALLDATETIME, @MAKH CHAR(4)
SELECT @NGHD = NGHD, @MAKH = MAKH FROM INSERTED
SELECT @NGDK = NGDK FROM KHACHHANG WHERE MAKH = @MAKH
PRINT @NGHD
PRINT @NGDK
IF (@NGHD >= @NGDK)
PRINT('Thêm mới một hóa đơn thành công.')
ELSE
BEGIN
PRINT ('Lỗi: Ngày mua hàng của một khách hàng thành viên sẽ lớn hơn hoặc bằng ngày khách hàng đó đăng ký thành viên.')
ROLLBACK TRANSACTION
END
END
GO
INSERT INTO HOADON(SOHD, NGHD, MAKH, MANV, TRIGIA) VALUES('1024', '22/07/2005', 'KH01', 'NV01', '320000')
delete from HOADON where SOHD = '1024'
GO
-- 12. Ngày bán hàng (NGHD) của một nhân viên phải lớn hơn hoặc bằng ngày nhân viên đó vào làm.
CREATE TRIGGER TRG_HD_NV ON HOADON FOR INSERT
AS
BEGIN
DECLARE @NGHD SMALLDATETIME, @NGVL SMALLDATETIME, @MANV CHAR(4)
SELECT @NGHD = NGHD, @MANV = MANV FROM INSERTED
SELECT @NGVL = NGVL FROM NHANVIEN WHERE MANV = @MANV
IF (@NGHD >= @NGVL)
PRINT ('Thêm mới một hóa đơn thành công.')
ELSE
BEGIN
PRINT ('Lỗi: Ngày bán hàng của một nhân viên phải lớn hơn hoặc bằng ngày nhân viên đó vào làm.')
ROLLBACK TRANSACTION
END
END
GO
-- 13. Mỗi một hóa đơn phải có ít nhất một chi tiết hóa đơn.
CREATE TRIGGER TRG_HD_CTHD ON HOADON FOR INSERT
AS
BEGIN
DECLARE @SOHD INT, @COUNT_SOHD INT
SELECT @SOHD = SOHD FROM INSERTED
SELECT @COUNT_SOHD = COUNT(SOHD) FROM CTHD WHERE SOHD = @SOHD
IF (@COUNT_SOHD >= 1)
PRINT ('Thêm mới một hóa đơn thành công.')
ELSE
BEGIN
PRINT ('Lỗi: Mỗi một hóa đơn phải có ít nhất một chi tiết hóa đơn.')
ROLLBACK TRANSACTION
END
END
GO
-- 14. Trị giá của một hóa đơn là tổng thành tiền (số lượng*đơn giá) của các chi tiết thuộc hóa đơn đó.
CREATE TRIGGER TRG_CTHD ON CTHD FOR INSERT, DELETE
AS
BEGIN
DECLARE @SOHD INT, @TONGGIATRI INT
SELECT @TONGGIATRI = SUM(SL * GIA), @SOHD = SOHD
FROM INSERTED INNER JOIN SANPHAM
ON INSERTED.MASP = SANPHAM.MASP
GROUP BY SOHD
UPDATE HOADON
SET TRIGIA += @TONGGIATRI
WHERE SOHD = @SOHD
END
GO
CREATE TRIGGER TR_DEL_CTHD ON CTHD FOR DELETE
AS
BEGIN
DECLARE @SOHD INT, @GIATRI INT
SELECT @SOHD = SOHD, @GIATRI = SL * GIA
FROM DELETED INNER JOIN SANPHAM
ON SANPHAM.MASP = DELETED.MASP
UPDATE HOADON
SET TRIGIA -= @GIATRI
WHERE SOHD = @SOHD
END
GO
---I.15
---TABLE KHACHHANG
CREATE TRIGGER TRG_DOANHSO_UPDATE1
ON KHACHHANG
FOR UPDATE
AS
BEGIN
DECLARE @KHACHHANG VARCHAR(4), @DOANHSO MONEY, @TONG MONEY
SELECT @KHACHHANG=MAKH, @DOANHSO=DOANHSO FROM inserted
SELECT @TONG=SUM(TRIGIA) FROM HOADON
WHERE MAKH=@KHACHHANG
GROUP BY MAKH
IF(@DOANHSO <> @TONG)
BEGIN
PRINT('LOI')
ROLLBACK TRANSACTION
END
END
---TABLE HOADON
CREATE TRIGGER TRG_DOANHSO_HD_INSERT
ON HOADON
FOR INSERT
AS
BEGIN
DECLARE @KHACHHANG VARCHAR(4), @DOANHSO MONEY, @TONG MONEY
SELECT @KHACHHANG=MAKH, @TONG=SUM(TRIGIA) FROM inserted GROUP BY MAKH
SELECT @DOANHSO = DOANHSO FROM KHACHHANG
WHERE MAKH=@KHACHHANG
IF(@DOANHSO <> @TONG)
BEGIN
PRINT('LOI')
ROLLBACK TRANSACTION
END
END
CREATE TRIGGER TRG_DOANHSO_HD_UPDATE
ON HOADON
FOR UPDATE
AS
BEGIN
DECLARE @KHACHHANG VARCHAR(4), @DOANHSO MONEY, @TONG MONEY
SELECT @KHACHHANG=MAKH, @TONG=SUM(TRIGIA) FROM inserted GROUP BY MAKH
SELECT @DOANHSO = DOANHSO FROM KHACHHANG
WHERE MAKH=@KHACHHANG
IF(@DOANHSO <> @TONG)
BEGIN
PRINT('LOI')
ROLLBACK TRANSACTION
END
END