FF
FF
USE Quanlynhanvien_Hotensinhvien;
--Tao bo sung rang buoc Defaul cho cot Dia chi "Chua xd"
CREATE DEFAULT diachi_default AS 'Ch?a xác ??nh';
EXEC sp_bindefault 'diachi_default', 'Nhanvien.DIACHI';
--Tao thu tuc hien thi Manv, Tennv khi biet Macv
CREATE PROCEDURE pr1 @MACV VARCHAR(20)
AS
SELECT Nhanvien.MANV, Nhanvien.TENNV, Chucvu.TENCV
FROM Nhanvien
JOIN Chucvu ON Nhanvien.MACV = Chucvu.MACV
WHERE Chucvu.MACV = @MACV
EXEC pr1 @MACV = 'CV001';
--Tao thu tuc khi biet ten phong, tinh tong so nhan vien
CREATE PROCEDURE HienThiSoNhanVienTheoTenPhong
@tenPhong VARCHAR(100)
AS
BEGIN
SELECT Phong.MAPH, Phong.TENPH, COUNT(Nhanvien.MANV) AS
TongSoNhanVien
FROM Phong
LEFT JOIN Nhanvien ON Phong.MAPH = Nhanvien.MAPH
WHERE Phong.TENPH = @tenPhong
GROUP BY Phong.MAPH, Phong.TENPH;
END;
EXEC HienThiSoNhanVienTheoTenPhong @tenPhong = 'Phòng Kỹ Thuật';
-- Tao view luu thong tin nvien cua phong 'Tai chinh'
CREATE VIEW c4 AS
SELECT Nhanvien.MANV, Nhanvien.TENNV, Phong.TENPH
FROM Nhanvien
JOIN Phong ON Nhanvien.MAPH = Phong.MAPH
WHERE Phong.TENPH = 'Tài chính';
SELECT * FROM c4
-- Tao view l?u thong tin nhung nhan vien co chuc vu pho phong
create view c55
as
select manv, tennv, maph, tencv
from nhanvien, Chucvu
where nhanvien.MACV = Chucvu.MACV
and tencv = 'Pho phong'
SELECT * FROM c55
-- Tao view luu thong tin cua phong 'Xay dung'
CREATE VIEW c5 AS
SELECT nhanvien.MANV, Nhanvien.TENNV, Phong.TENPH
FROM Nhanvien
JOIN Phong ON Nhanvien.MAPH = Phong.MAPH
WHERE
Phong.TENPH = 'Xây d?ng'
SELECT * FROM c5
-- Tao trigger tinh tien luong cua nvien khi luong thay doi luong = hsluong
*1450000
create trigger c5 nhanvien
for update
as
update nhanvien
set luong = hsluong *145000
-- Tao trigger tinh tien thuc linh cho nhan vien khi hspc thay doi
-- thuclinh = luong + Luong * hesopc
create trigger c555 on chucvu
for update
as
update nhanvien
set thuclinh = luong + luong * (set hesopc
from chucvu
where chucvu, macv=
nhanvien.macv)
-- Tao trigger kiem tra hsl cua nhan vien chi nhan gia tri tu 2.34 den 9.4
-- khi them du lieu vao bang nhan vien, ngoai gtri bao loi
create trigger c54 on nhanvien
for insert
as
if ((select hsluong
from inserted) <2.34 or ((select hsluong
from inserted)> 9.0)
begin
print 'Nhap hsl tu 2.34 den 9.1'
rollback tran
end
--Hien thi thong tin cac mat hang co so luong > 20 don vi tinh--
SELECT *
FROM HANGHOA
WHERE Soluong > 20
--Hien thi ma hoa don, so tien thanh toan cua hoa don HD01 --
SELECT mahd, thanhtoan
FROM HOADON
WHERE Mahd = 'HD01'
--Hien thi thong tin cac hoa don co tien thanh toan lon nhat--
SELECT *
FROM HOADON
WHERE thanhtoan = (SELECT MAX(Thanhtoan) FROM HOADON)
--Hien thi thong tin cac mat hang co don vi tinh la bo--
SELECT *
FROM HANGHOA
WHERE Donvitinh = 'Bo'
--Hien thi thong tin mat hang duoc ban voi so luong it nhat,thong tin hien thi co:
ma hang, ten hang, tong so luong hang duoc ban--
select hanghoa.mahang, tenhang, sum (cthoadon.soluong) as Tongsohangduocban
from hanghoa, CTHOADON
where hanghoa.mahang = cthoadon.Mahang
group by hanghoa.Mahang, Tenhang
having sum (CTHOADON.Soluong)<= all (select sum (Soluong)
from CTHOADON
group by Mahang)
--Hien thi thong tin cac hoa don co tien thanh toan lon nhat
select *
from hoadon
where thanhtoan = (select max (thanhtoan)
from hoadon)
--Tao bo sung rang buoc default cho cot Ngayhd la ngay hien tai --
create default ngayhd
as getdate ()
exec sp_bindefault 'ngayhd','hoadon.ngayhd'
-- Tạo bsung ràng buộc Rule cho cột Donvitinh chỉ nhận các giá trị: Chiếc, Bộ
create rule dv
as
@dvt in ('Chiec', 'Bo')
--Tao thu tuc hien thi thong tin tong so mat hang ban tren moi hoa don
--khi biet ma hoa don, thong tin hien thi co: mhd, nhd, tong so mat hang ban
create proc c1 @mahoadon varchar (20)
as
select hoadon.mahd, ngayhd, count (*) as Tongsomathang
from hoadon, cthoadon
where hoadon.mahd = @mahoadon
group by hoadon.mahd, ngayhd
exec c1'hd04'
--Tao thu tuc hien thi tong so hang duoc ban tren moi hoa don
-- thong tin hien thi co: mhd, ngayhd, tong so luong hang
create proc c2
as
select hoadon.mahd, ngayhd, sum(soluong) as Tongsoluong
from hoadon, cthoadon
where hoadon.mahd= cthoadon.mahd
group by hoadon.mahd, ngayhd
exec c2
--Tao thu tuc hien thi tien ban cua hoa don khi bt ma hoa don
--thong tin hien thi: mhd, ngayhd, tien ban
create proc c3 @mahoadon varchar (20)
as
select mahd, ngayhd, tienban
from hoadon
where madhd = @mahoadon
exec c3 'hd01'
--Tao thu tuc hien thi thong tin cac hoa don khi biet ngay
-- thong tin hien thi: mhd, ngayhd, tienban
create proc c4 @ngayhoadon date
as
select mahd, ngayhd, tienban
from hoadon
where ngayhd = @ngayhoadon
exec c4 '2/2/2024'
--tao trigger cap nhat lai tien ban cua moi hoadon khi xoa thong tin
-- mat hang duoc ban trg bang cthoadon
--tienban= sum (soluong * dongia)
create trigger c3 on cthoadon
for delete
as
update hoadon
set tienban = (select sum (soluong * dongia)
from cthoadon
where cthoadon.mahd = hoadon.mahd
group by cthoadon.mahd)
--tao trigger cap nhat lai tien thanh toan cua moi hoa don khi sua thong tin giam
gia
-- thanhtoan = tienban - (tienban*giamgia)
create trigger trig3 on hoadon
for update
as
update hoadon
set thanhtoan = tienban - (tienban * giamgia)
--tao trigger cap nhat so luong ton trong hang hoa moi khi sua mat hang duoc ban
trong cthoadon
--biet soluongton = soluongton - soluong
create trigger trig4 on cthoadon
for update
as
update hanghoa
set hanghoa.soluong = hanghoa.soluong - (select inserted soluong
from inserted ) + (select deleted.soluong
from deleted)
where mahang = (select mahang from inserted)
--tao trigger cap nhat so luong ton trong hang hoa moi khi them mat hang duoc ban
trong cthoadon
--biet soluongton = soluongton - soluong
create trigger trig4 on cthoadon
for update
as
update hanghoa
set hanghoa.soluong = hanghoa.soluong - (select inserted soluong from
inserted)
--Tao view hien thi thong tin mat hang duoc khach mua voi sluong nhieu nhat
create view c5
as
select hanghoa.mahang, tenhang, sum (cthoadon.soluong)as
Tongsoluongban
from hanghoa, cthoadon
where hanghoa.mahang = cthoadon.mahang
group by hanghoa.mahang, tenhang
having sum (cthoadon.soluong)>= all (select sum (cthoadon.soluong)
from
cthoadon
group by
mahang)
select * from c5
--Hien thi ma chuyen di, ma dia diem voi so ngay luu lon nhat
SELECT MACD, MADD, SNLUU
FROM CTIETCD
WHERE SNLUU = (SELECT MAX(SNLUU) FROM CTIETCD);
--Hien thi so ngay luu lon nhat, nho nhat chuyen di CD2
SELECT MAX(SNLUU) AS Max_SNLUU, MIN(SNLUU) AS Min_SNLUU
FROM CTIETCD
WHERE MACD = 'CD002';
--Tao bo sung rang buoc Defaul cho cot NGKH bang ngay hien tai
create defaul ngkh
as
getdate ()
exec sp_bindefault 'ngkh', 'CHUYENDI.NGKH'
--Tao bo sung rang Rule cho cot KHDK lon hon 0
create rule khdk
as
@khdk >0
EXEC sp_bindrule 'KHDK', 'CHUYENDI.KHDK'
--Tao bo sung rang buoc Rule cho cot NGKH, NGKT >= ngày hien tai
CREATE RULE c3
AS
@value >= GETDATE()
EXEC sp_bindrule 'c3', 'CHUYENDI.NGKH'
EXEC sp_bindrule 'c3', 'CHUYENDI.NGKT'
--Tao view lưu thong tin chuyen di co so ngay luu lai lon nhat
CREATE VIEW c5 AS
SELECT CD.MACD, CD.TENCD, SUM(CT.SNLUU) AS TongSoNgayLuu
FROM CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
GROUP BY CD.MACD, CD.TENCD
HAVING SUM(CT.SNLUU) >= ALL (SELECT SUM(SNLUU) FROM
CTIETCD
GROUP BY MACD)
SELECT * FROM c5
--Tao view luu thong tin cac chuyen di co so khach du kien nhieu nhat
CREATE VIEW c7 AS
SELECT MACD, TENCD, KHDK
FROM CHUYENDI
WHERE KHDK = (SELECT MAX(KHDK) FROM CHUYENDI);
SELECT * FROM c7
--Tao view hien thi thong tin chuyen di va so luong dia diem cua cac chuyen di
CREATE VIEW c44 AS
SELECT CD.TENCD, COUNT(CT.MADD) AS SoLuongDiaDiem
FROM CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
GROUP BY CD.TENCD
SELECT * FROM c44
--Tao view hien thi thong tin chuyen di co ngay khoi hang 2020
CREATE VIEW c55 AS
SELECT MACD, TENCD
FROM CHUYENDI
WHERE YEAR(NGKH) = 2020
SELECT * FROM c55
--Tao thu tuc hien thi khi biet thong tin chuyen di: mcd,tcd, tong so dia diem
CREATE PROC pro1 @MaChuyenDi varCHAR(20)
AS
SELECT CD.MACD, CD.TENCD, COUNT(CT.MADD) AS TongSoDiaDiem
From CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
WHERE CD.MACD = @MaChuyenDi
GROUP BY CD.MACD, CD.TENCD
--Tao thu tuc hien thi thong tin co tong so ngay luu lon hon 10
CREATE PROCEDURE c4
AS
SELECT CD.MACD, CD.TENCD, SUM(CT.SNLUU) AS TongSoNgayLuu
FROM CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
GROUP BY CD.MACD, CD.TENCD
HAVING SUM(CT.SNLUU) > 10
--Tao trigger thuc hien ktra ngay khoi hanh va ngay ket thuc khi them/sua
--lon hon hoac bang ngay hien tai
CREATE TRIGGER ktra ON CHUYENDI
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKH < GETDATE()
)
BEGIN
PRINT 'Ngày khởi hành phải lớn hơn hoặc bằng ngày hiện tại';
ROLLBACK TRANSACTION;
RETURN;
END
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKT < GETDATE()
)
BEGIN
PRINT 'Ngày kết thúc phải lớn hơn hoặc bằng ngày hiện tại';
ROLLBACK TRANSACTION;
RETURN;
END
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKH > NGKT
)
BEGIN
PRINT 'Ngày khởi hành phải nhỏ hơn hoặc bằng ngày kết thúc';
ROLLBACK TRANSACTION;
RETURN;
END
END
--Viet trigger ktra SNLUU khi them/sua phai >=1
CREATE TRIGGER CheckSoNgayLuu
ON CTIETCD
FOR INSERT, UPDATE
AS
BEGIN
-- Kiểm tra điều kiện cho INSERT
IF EXISTS (
SELECT *
FROM CTIETCD
WHERE SNLUU < 1
)
BEGIN
PRINT 'Số ngày lưu lại phải lớn hơn hoặc bằng 1';
ROLLBACK TRANSACTION;
RETURN;
END
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE KHDK < 1
)
BEGIN
PRINT 'Số khách đăng ký phải lớn hơn hoặc bằng 1';
ROLLBACK TRANSACTION;
RETURN;
END
END;
--Tao trigger ktra ngay khoi hanh < ngay ket thuc khi them du lieu
CREATE TRIGGER CheckNgayKhoiHanh
ON CHUYENDI
FOR INSERT
AS
BEGIN
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKH >= NGKT
)
BEGIN
PRINT 'Ngày khởi hành phải nhỏ hơn ngày kết thúc';
ROLLBACK TRANSACTION;
RETURN;
END
END;
SELECT SV.HoTenSV
FROM SinhVien SV
JOIN HuongDan HD ON SV.MaSV = HD.MaSV
WHERE HD.MaGV = @MaGV;
END;
EXEC HienThiSinhVienTheoGiangVien @MaGV = 'GV03';
--Tao view hien thi ho ten gv, svinh giang vien huong dan
CREATE VIEW vw_HienThi_GV AS
SELECT GV.HoTenGV AS InstructorName, SV.HoTenSV AS StudentName
FROM GiangVien GV
JOIN HuongDan HD ON GV.MaGV = HD.MaGV
JOIN SinhVien SV ON HD.MaSV = SV.MaSV
WHERE GV.MaGV = 'GV01';
SELECT * FROM vw_HienThi_GV;
CREATE DATABASE QUANLYKHACHSAN;
USE QUANLYKHACHSAN;
--Hien thi ten khach hang thue phong trong hop dong co ma HD01
SELECT KHACHHANG.TENKH
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
JOIN CTTHUEPHONG ON THUEPHONG.MAHD = CTTHUEPHONG.MAHD
WHERE THUEPHONG.MAHD = 'HD001';
--Hien thi thong tin khach hang chua thue bao gio
SELECT MAKH, TENKH, DIACHI
FROM KHACHHANG
WHERE MAKH NOT IN (
SELECT MAKH
FROM THUEPHONG
);
--Hien thi thong tin cac phong chua bao gio duoc thue
SELECT PHONG.MAPH, PHONG.LOAIPH, PHONG.DT, PHONG.GIAPHONG
FROM PHONG
WHERE PHONG.MAPH NOT IN (
SELECT MAPH
FROM CTTHUEPHONG
);
--Hien thi thong tin da thue phong HD01
SELECT KHACHHANG.MAKH, KHACHHANG.TENKH,
KHACHHANG.DIACHI
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
JOIN CTTHUEPHONG ON THUEPHONG.MAHD = CTTHUEPHONG.MAHD
WHERE CTTHUEPHONG.MAPH = 'HD01';
--Hien thi ten khach, so lan thu voi so phong nhieu nhat
SELECT KHACHHANG.TENKH, COUNT(THUEPHONG.MAHD) AS
SoLanThue
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
GROUP BY KHACHHANG.MAKH, KHACHHANG.TENKH
HAVING COUNT(THUEPHONG.MAHD) >= (
SELECT MAX(SoLanThue)
FROM (
SELECT COUNT(THUEPHONG.MAHD) AS SoLanThue
FROM THUEPHONG
GROUP BY THUEPHONG.MAKH
) AS SubQuery
);
-- Phong duoc thue nhieu nhat
SELECT CTTHUEPHONG.MAPH, COUNT(CTTHUEPHONG.MAHD) AS
SoLanThue
FROM CTTHUEPHONG
GROUP BY CTTHUEPHONG.MAPH
HAVING COUNT(CTTHUEPHONG.MAHD) = (
SELECT MAX(SoLanThue)
FROM (
SELECT COUNT(CTTHUEPHONG.MAHD) AS SoLanThue
FROM CTTHUEPHONG
GROUP BY CTTHUEPHONG.MAPH
) AS SubQuery
);
--Khach hang Mai Hoa da thue bao phong
SELECT khachhang.tenkh, COUNT( CTTHUEPHONG.MAPH) AS
SoPhongThue
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
JOIN CTTHUEPHONG ON THUEPHONG.MAHD = CTTHUEPHONG.MAHD
group by khachhang.tenkh
having khachhang.tenkh = 'Mai Hoa'
--Tao bot sung rang buoc Defaul cho cot Thanh Tien = 0
CREATE DEFAULT DF_ThanhTien
as 0;
EXEC sp_bindefault 'DF_ThanhTien', 'CTTHUEPHONG.ThanhTien';
--Tao thu tuc hien thi thong tin Khach hang khi biet ma phong va ngaybd
CREATE PROCEDURE GetCustomerInfoByRoomAndDate
@MAPH VARCHAR(10),
@NGBD DATE
AS
BEGIN
SELECT KH.MAKH, KH.TENKH, KH.DIACHI, KH.DIENTHOAI
FROM KHACHHANG KH
JOIN THUEPHONG TP ON KH.MAKH = TP.MAKH
JOIN CTTHUEPHONG CTP ON TP.MAHD = CTP.MAHD
WHERE CTP.MAPH = @MAPH
AND TP.NGBD = @NGBD;
END;
EXEC GetCustomerInfoByRoomAndDate 'PH01', '2020-09-02';
--Tao thu tuc hien thi phong co nhieu khach thue nhat
CREATE PROCEDURE GetMostRentedRooms
AS
SELECT P.MAPH, P.Loaiph, P.DT, P.GIAPHONG, COUNT(*) AS SoLanThue
FROM CTTHUEPHONG CTP
JOIN PHONG P ON CTP.MAPH = P.MAPH
GROUP BY P.MAPH, P.Loaiph, P.DT, P.GIAPHONG
HAVING COUNT(*) = (SELECT MAX(SoLanThue) FROM (
SELECT COUNT(*) AS SoLanThue
FROM CTTHUEPHONG
GROUP BY MAPH
) AS RoomRentCounts)
ORDER BY SoLanThue DESC;
END;
EXEC GetMostRentedRooms;
--tao view hien thi ten khach hang, so luong phong ma KH thuê
CREATE VIEW View_KhachHang_SoLuongPhong AS
SELECT
KH.TENKH,
COUNT(CP.MAPH) AS SoLuongPhong
FROM
KHACHHANG KH
JOIN
THUEPHONG TH ON KH.MAKH = TH.MAKH
JOIN
CTTHUEPHONG CP ON TH.MAHD = CP.MAHD
GROUP BY
KH.TENKH;
SELECT * FROM View_KhachHang_SoLuongPhong;
--Tao trigger ktra dien tich trong phong phai lon hon 0 khi them thong tin44
create trigger c5 on phong
for insert
as
if (select dt from inserted)<=0
begin
print 'Nhap dien tich > 0'
rollback tran
end
-- tao trigger ktra NGBD và NGKT khi them/sua lon hon hoac bang ngay HT
CREATE TRIGGER trg_CheckDate
ON THUEPHONG
FOR INSERT, UPDATE
AS
BEGIN
-- Kiểm tra nếu ngày bắt đầu hoặc ngày kết thúc nhỏ hơn ngày hiện tại
IF EXISTS (
SELECT *
FROM inserted
WHERE NGBD < GETDATE() OR NGKT < GETDATE()
)
BEGIN
-- Thông báo lỗi và hoàn tác giao dịch nếu không thỏa mãn điều kiện
PRINT 'Ngày bắt đầu và ngày kết thúc phải lớn hơn hoặc bằng ngày hiện tại!';
ROLLBACK TRANSACTION;
END
END;
--Tao trigger cap nhat Thanh Tien khi them du lieu bang Thuephonh
CREATE TRIGGER UpdateThanhTien
ON THUEPHONG
FOR INSERT
AS
BEGIN
UPDATE THUEPHONG
SET THANHTIEN = (SELECT GIAPHONG * SONG
FROM CTTHUEPHONG
WHERE MAHD = (SELECT MAHD FROM inserted))
WHERE MAHD = (SELECT MAHD FROM inserted);
END;
-- Dua ra thong tin giang vien co dia chi Cau Giay, sx theo th? t? ten giam dan
SELECT GV, HoTen, DiaChi, NgaySinh
FROM GiangVien
WHERE DiaChi LIKE '%C?u Gi?y%'
ORDER BY HoTen DESC
--Dua ra dsach gom ho ten, dia chi, ngay sinh tgia ?e tai 'Phat hien tri thuc'/ 'Nhan
dien khuon mat EPU'
SELECT GiangVien.HoTen, GiangVien.DiaChi, GiangVien.NgaySinh
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT
WHERE DeTai.TenDT IN ('Phát hi?n tri th?c', 'Nh?n di?n khuôn m?t EPU');
-- Dua ra ma giang vien, ten gv, tong so tgia nghien cuu khoc hoc
SELECT GiangVien.GV, GiangVien.HoTen, SUM(ThamGia.SoGio) AS
TongSoGio
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
GROUP BY GiangVien.GV, GiangVien.HoTen;
-- Dua ra toan bo thong tin ma de tai, ten de tai, giang vien tgia, dc
SELECT DeTai.DT, DeTai.TenDT, GiangVien.HoTen, GiangVien.DiaChi,
GiangVien.NgaySinh, DeTai.KinhPhi, ThamGia.SoGio, DeTai.Cap
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT;
-- Tao thu tuc hien thi Ten de tai cua nhung de tai co kinh phi nho hon so chi dinh
CREATE PROCEDURE sp_HienThiDeTaiTheoKinhPhi (@KinhPhiMax
DECIMAL)
AS
BEGIN
-- Ki?m tra và hi?n th? tên ?? tài có kinh phí nh? h?n giá tr? ch? ??nh
IF EXISTS (SELECT 1 FROM DeTai WHERE KinhPhi < @KinhPhiMax)
BEGIN
SELECT TenDT
FROM DeTai
WHERE KinhPhi < @KinhPhiMax;
END
ELSE
BEGIN
PRINT 'Không có ?? tài nào';
END
END;
EXEC sp_HienThiDeTaiTheoKinhPhi @KinhPhiMax = 300;
-- viet trigger cap nhat thanh tien tu bang tham gia, Thanhtien = sogio* 50000
CREATE TRIGGER trigger_UpdateThanhTien
ON ThamGia
FOR INSERT, UPDATE
AS
BEGIN
-- C?p nh?t giá tr? thành ti?n cho m?i b?n ghi trong b?ng inserted
UPDATE ThamGia
SET ThanhTien = SoGio * 50000
FROM ThamGia AS ThamGiaTable
INNER JOIN inserted AS InsertedTable
ON ThamGiaTable.GV = InsertedTable.GV
AND ThamGiaTable.DT = InsertedTable.DT
AND ThamGiaTable.SoGio = InsertedTable.SoGio;
END;
--backup c? s? d? li?u sang ? ??a khác--
BACKUP DATABASE [database_name] TO DISK = 'E:\database_backup.bak'
CREATE DATABASE Quanthuvien_Hotensv;
USE Quanthuvien_Hotensv;
--Tao thu tuc khi bt ma doc gia, hien thi sluong sach moi loai
CREATE PROCEDURE GetBookQuantityByReader
@MaDG VARCHAR(20)
AS
BEGIN
SELECT Sach.Theloai, SUM(CTPhieumuon.Soluong) AS TongSoLuong
FROM CTPhieumuon
JOIN Phieumuon ON CTPhieumuon.Mapm = Phieumuon.Mapm
JOIN Sach ON CTPhieumuon.Masach = Sach.Masach
WHERE Phieumuon.Madg = @MaDG
GROUP BY Sach.Theloai;
END;
EXEC GetBookQuantityByReader 'DG01';
--Tao trigger cap nhat lai so luong sach trong thu vien khi sl sach trong
CTPhieumuon thay doi
CREATE TRIGGER UpdateBookQuantity
ON CTPhieumuon
for INSERT, UPDATE, DELETE
AS
BEGIN
-- Nếu có bản ghi INSERT hoặc UPDATE
IF EXISTS (SELECT * FROM inserted)
BEGIN
UPDATE Sach
SET Soluong = Soluong - (SELECT Soluong FROM inserted WHERE
inserted.Masach = Sach.Masach)
WHERE Masach IN (SELECT Masach FROM inserted);
END
--Tao trigger cap nhat so luong sach trong thu vien khi xoa sach muon trong
CTPhieumuon
CREATE TRIGGER UpdateSoluongSach
ON CTPhieumuon
FOR DELETE
AS
BEGIN
-- Cập nhật lại số lượng sách trong bảng Sach
UPDATE Sach
SET Soluong = Soluong + (SELECT Soluong FROM deleted WHERE Masach
= Sach.Masach)
FROM Sach
WHERE Sach.Masach = (SELECT Masach FROM deleted);
END;