-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTrigger.sql
More file actions
227 lines (208 loc) · 7.69 KB
/
Trigger.sql
File metadata and controls
227 lines (208 loc) · 7.69 KB
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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
use DBMS_DOAN_QUANLYCUAHANGXE
go
----------------------------------------------------------------
CREATE or ALTER TRIGGER tg_ThayDoiTrangThaiHoaDon on CHITIETHOADONXE
for update, insert as
BEGIN
DECLARE @soTienDaTra money, @maHoaDon nvarchar(20), @tongTien money
SELECT @soTienDaTra = ins.soTienDaTra, @maHoaDon = ins.maHoaDon FROM inserted as ins
SElECT @tongTien = hd.tongTien FROM HOADON as hd WHERE hd.maHoaDon = @maHoaDon
IF @tongTien <= @soTienDaTra
BEGIN
UPDATE HOADON
SET tinhTrang = N'Đã Thanh Toán'
WHERE maHoaDon = @maHoaDon
END
END
go
--------------------------------------------------------------------------------
-- Trigger khi nhập xe về thì mã xe tự động tạo theo mã lô xe
create or alter trigger trg_SinhMaXeKhiNhapXe
on CHITIETPHIEUNHAPXE
after insert
as
begin
declare @maLoXe nvarchar(20), @soLuong nvarchar(20)
-- Lấy xe mã Lô xe và số lượng từ inserted (CTPN Xe)
select @maLoXe = maLoXe, @soLuong = soLuong from inserted
-- Nếu đã nhập mã lô xe này
if (@maLoXe in (select maLoXe from XE))
begin
declare @i int = @soLuong
while @i > 0 -- Bắt đầu thực hiện cho tới khi hết số lượng
begin
-- Khởi tạo giá trị LastID = Mã xe cuối cùng trong LoXe vừa insert
declare @NewId nvarchar(20), @LastID nvarchar(20)
select @LastID = ISNULL(MAX(CAST(SUBSTRING(maXe, 11, LEN(maXe) - 10) as int)), 0)
from XE where maLoXe = @maLoXe
if (@LastID < 999)
begin
set @NewId = @maLoXe + '_XE' + RIGHT('000' + CAST(ISNULL(@LastID, 0) + 1 as nvarchar), 3)
end
else
begin
set @NewId = @maLoXe + '_XE' + CAST(ISNULL(@LastID, 0) + 1 as nvarchar)
end
insert into XE values (@NewId, @maLoXe)
set @i = @i - 1
end
end
else -- Xe có mã này chưa được nhập lần nào
begin
declare @y int = @soLuong, @ID int = 1
while @y > 0 -- Bắt đầu thực hiện cho tới khi hết số lượng
begin
if (@ID < 999)
begin
set @NewId = @maLoXe + '_XE' + RIGHT('000' + CAST(@ID as nvarchar), 3)
end
else
begin
set @NewId = @maLoXe + '_XE' + CAST(@ID as nvarchar)
end
insert into XE values (@NewId, @maLoXe)
set @y = @y - 1
set @ID = @ID + 1
end
end
end
go
--------------------------------------------------------------------------------
--Trigger khi nhập hàng về chi nhánh thì sẽ cập nhật vào kho
---------- Cập nhật kho xe
create or alter trigger trg_CapNhatKhoXeKhiNhapHang
on CHITIETPHIEUNHAPXE
after insert
as
begin
declare @maChiNhanh nvarchar(20), @maLoXe nvarchar(20), @soLuong int
select @maChiNhanh = maChiNhanh, @maLoXe = maLoXe, @soLuong = soLuong
from PHIEUNHAP PN
inner join inserted
on PN.maPhieuNhap = inserted.maPhieuNhap
if ( (@maChiNhanh in (select maChiNhanh from KHOXE)) and (@maLoXe in (select maLoXe from KHOXE)) )
begin
Update KHOXE
set soLuongXeCon = soLuongXeCon + @soLuong
where maChiNhanh = @maChiNhanh and maLoXe = @maLoXe
end
else
begin
insert into KHOXE(maChiNhanh, maLoXe, soLuongXeCon)
values(@maChiNhanh, @maLoXe, @soLuong)
end
end
go
---------- Cập nhật kho phụ tùng
create or alter trigger trg_CapNhatKhoPhuTungKhiNhapHang
on CHITIETPHIEUNHAPPHUTUNG
after insert
as
begin
declare @maChiNhanh nvarchar(20), @maPhuTung nvarchar(20), @soLuong int
select @maChiNhanh = maChiNhanh, @maPhuTung = maPhuTung, @soLuong = soLuong
from PHIEUNHAP PN
inner join inserted on PN.maPhieuNhap = inserted.maPhieuNhap
if ( (@maChiNhanh in (select maChiNhanh from KHOPHUTUNG)) and (@maPhuTung in (select maPhuTung from KHOPHUTUNG)) )
begin
update KHOPHUTUNG
set soLuongPhuTungCon = soLuongPhuTungCon + @soLuong
where maChiNhanh = @maChiNhanh and maPhuTung = @maPhuTung
end
else
begin
insert into KHOPHUTUNG(maChiNhanh, maPhuTung, soLuongPhuTungCon)
values(@maChiNhanh, @maPhuTung, @soLuong)
end
end
go
--------------------------------------------------------------------------------
-- TRIGGER khi xuất hóa đơn mặt hàng cho khách hàng thì sẽ cập nhật lại số lượng hàng trong kho
-- Hóa đơn xe
--create or alter trigger trg_CapNhatKhoXeKhiBan
--------------------------------------------------------------------------------
-- TRIGGER tự động sinh mã nhân viên
go
CREATE or Alter trigger tg_ThemNhanVien on NHANVIEN
instead of insert
as
BEGIN
declare @hoTenNhanVien nvarchar(50), @CCCD nvarchar(20), @ngaySinh date, @gioiTinh nvarchar(5), @diaChi nvarchar(255), @soDienThoai nvarchar(20), @chucVu nvarchar(50), @maChiNhanh nvarchar(20), @hinhAnh nvarchar(300)
select @hoTenNhanVien = nv.hoTenNhanVien, @CCCD = nv.CCCD, @ngaySinh = nv.ngaySinh, @gioiTinh = nv.gioiTinh, @diaChi = nv.diaChi, @soDienThoai = nv.soDienThoai, @chucVu = nv.chucVu, @maChiNhanh = nv.maChiNhanh, @hinhAnh = nv.hinhAnh
from inserted as nv
declare @maNhanVien nvarchar(20)
set @maNhanVien = dbo.fn_TaoMaNhanVien(@maChiNhanh)
insert into NHANVIEN(maNhanVien, hoTenNhanVien, CCCD, ngaySinh, gioiTinh, diaChi, soDienThoai, chucVu, maChiNhanh, hinhAnh)
Values(@maNhanVien, @hoTenNhanVien , @CCCD , @ngaySinh, @gioiTinh, @diaChi , @soDienThoai, @chucVu, @maChiNhanh, @hinhAnh)
END
<<<<<<< HEAD
=======
--------------------------------------------------------------------------------
-- Tạo TRIGGER khi thêm nhân viên thì tài khoản tự động thêm
-- Set Tên đăng nhập mặc định là mã nhân viên
go
CREATE OR ALTER TRIGGER trg_ThemTaiKhoan
ON NHANVIEN
AFTER INSERT
AS
BEGIN
print 111
DECLARE @taiKhoan NVARCHAR(20), @chucVu NVARCHAR(50)
SELECT @taiKhoan = maNhanVien, @chucVu = chucVu FROM inserted
INSERT INTO TAIKHOAN VALUES (@taiKhoan, '1', @chucVu, @taiKhoan)
EXEC('CREATE LOGIN ' + @taiKhoan + ' WITH PASSWORD = ''1''')
EXEC('CREATE USER ' + @taiKhoan + ' FOR LOGIN ' + @taiKhoan)
IF @chucVu = N'Quản lý'
BEGIN
EXEC('USE DBMS_DOAN_QUANLYCUAHANGXE;
EXEC sp_addrolemember r_admin, ' + @taiKhoan)
END
ELSE IF @chucVu like N'%bán%'
BEGIN
EXEC('USE DBMS_DOAN_QUANLYCUAHANGXE;
EXEC sp_addrolemember r_seller, ' + @taiKhoan)
END
ELSE IF @chucVu like N'%bảo%'
BEGIN
EXEC('USE DBMS_DOAN_QUANLYCUAHANGXE;
EXEC sp_addrolemember r_maintenace, ' + @taiKhoan)
END
END
go
-- Test
--begin tran
-- INSERT INTO CHINHANH (maChiNhanh, tenChiNhanh, diaChi)
-- VALUES ('CN001', N'Chi nhánh A', N'123 Đường A, Quận 1, TP.HCM')
-- INSERT INTO NHANVIEN (maNhanVien, hoTenNhanVien, CCCD, ngaySinh, gioiTinh, diaChi, soDienThoai, chucVu, maChiNhanh)
-- VALUES ('NV001', N'Nguyễn Văn A', '123456789012', '1990-05-15', N'Nam', N'123 Đường X, Quận Y, TP.HCM', '0123456789', N'Quản lý', 'CN001')
-- select * from TaiKhoan
--rollback
--go
-- Tạo trigger Khi sửa mã nhân viên thì tài khoản cũng sẽ cập nhật theo
--create or alter trigger trg_CapNhatTaiKhoan
--on NHANVIEN
--for update
--as
--begin
-- declare @taiKhoanCu nvarchar(20), @taiKhoanMoi nvarchar(20)
-- set @taiKhoanMoi = (select maNhanVien from inserted)
-- set @taiKhoanCu = (select maNhanVien from deleted)
-- Update TAIKHOAN
-- set tenDangNhap = @taiKhoanMoi, maNhanVien = @taiKhoanMoi
-- where tenDangNhap = @taiKhoanCu
--end
--go
-- Test
--begin tran
-- INSERT INTO CHINHANH (maChiNhanh, tenChiNhanh, diaChi)
-- VALUES ('CN001', N'Chi nhánh A', N'123 Đường A, Quận 1, TP.HCM')
-- INSERT INTO NHANVIEN (maNhanVien, hoTenNhanVien, CCCD, ngaySinh, gioiTinh, diaChi, soDienThoai, chucVu, maChiNhanh)
-- VALUES ('NV001', N'Nguyễn Văn A', '123456789012', '1990-05-15', N'Nam', N'123 Đường X, Quận Y, TP.HCM', '0123456789', N'Quản lý', 'CN001')
-- select * from TaiKhoan
-- update NHANVIEN
-- set maNhanVien = 'NV002'
-- where maNhanVien = 'NV001'
-- select * from TAIKHOAN
--rollback
--go
>>>>>>> 37a5fa297a2918d7f0e654ee4018b8c10a17efd3