Professional Documents
Culture Documents
Nguyễn Văn Hải - CNTT2-K62 - 211242201 - TH3
Nguyễn Văn Hải - CNTT2-K62 - 211242201 - TH3
--1. Kiểm soát giới tính của nhân viên chỉ được nhập giá trị là ‘Nam’ hoặc ‘Nữ’
--2. Kiểm soát ngày vào làm (NgayLV) của nhân viên phải sau ngày sinh và đảm bảo
--nhân viên trên 18 tuổi
IF EXISTS (
SELECT 1
FROM inserted
WHERE DATEDIFF(YEAR, [NgaySinh], GETDATE()) < @MinAge
)
BEGIN
ROLLBACK;
PRINT 'PHAI TREN 18 TUOI'
RETURN;
END;
IF EXISTS (
SELECT 1
FROM inserted
WHERE [NgayLV] < [NgaySinh]
)
BEGIN
ROLLBACK;
PRINT 'NGAY VAO LAM PHAI SAU NGAY SINH'
RETURN;
END;
END;
INSERT INTO NHANVIEN ([MaNV],[HoTen],[QueQuan],[Gioi
Tinh],[SDT],[NgaySinh],[NgayLV],[HSL])
VALUES
('0006', 'TEST', 'ABC' ,'Nữ', '0978652365', '2020-09-21 00:00:00.000', '2020-
09-20 00:00:00.000' ,NULL)
INSERT INTO NHANVIEN ([MaNV],[HoTen],[QueQuan],[Gioi
Tinh],[SDT],[NgaySinh],[NgayLV],[HSL])
VALUES
('0006', 'TEST', 'ABC' ,'Nữ', '0978652365', '2000-09-21 00:00:00.000', '2000-
09-20 00:00:00.000' ,NULL)
--3. Thêm trường Đơn vị tính vào bảng Hàng hóa. Kiểm soát đơn vị tính khi nhập
--hàng hóa chỉ được chứa từ “Cái”, “Hộp”, “Thùng”, “Kg”, “Chiếc”
ALTER TABLE HANGHOA
ADD DonViTinh nvarchar(50) NULL;
--4. Tạo trigger cập nhật tự động giá của bảng hàng hóa sang bảng chi tiết hóa đơn
--mỗi khi thêm mới bản ghi
ALTER TABLE [dbo].[CT_HOADON]
ADD GiaBaN FLOAT NULL;
--5. Thêm trường ChietKhau vào bảng CT_Hoadon và cập nhật tự động trường này
--bằng 15% giá bán
ALTER TABLE CT_HOADON
ADD ChietKhau float NULL;
CREATE OR ALTER TRIGGER trig_cau_5
ON CT_HOADON
AFTER INSERT,UPDATE
AS
BEGIN
UPDATE CT_HOADON
SET ChietKhau = 0.15 * ISNULL(i.GiaBan,0)
FROM CT_HOADON c
INNER JOIN inserted i ON c.MaHD = i.MaHD AND c.MaHH = i.MaHH;
END;
--6. Thêm Trường ThanhTien và cập nhật tự động cho trường này
ALTER TABLE HOADON
ADD ThanhTien float NULL;
UPDATE h
SET ThanhTien = ISNULL(SL * GIABAN - SL * CHIETKHAU, 0)
FROM CT_HOADON h
WHERE h.MaHD IN (SELECT MaHD FROM inserted) OR h.MaHD IN (SELECT MaHD FROM deleted);
UPDATE h
SET ThanhTien = ISNULL((SELECT SUM(i.ThanhTien) FROM CT_HOADON i WHERE i.MaHD =
h.MaHD), 0)
FROM HOADON h
WHERE h.MaHD IN (SELECT MaHD FROM inserted) OR h.MaHD IN (SELECT MaHD FROM deleted);
END;
--7. Cập nhật lại giá của bảng hàng hóa sang bảng chi tiết hóa đơn
--NHU CAU 4
--VI. Tạo FUNCTION
--1. Tạo hàm lấy danh sách nhân viên theo quê quán
CREATE OR ALTER FUNCTION FUNC_CAU1 (@QUEQUAN nvarchar(max))
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM NHANVIEN
WHERE QueQuan LIKE N'%' + @QUEQUAN
);
--2. Tạo hàm lấy danh sách hóa đơn theo nhân viên và ngày (ngày/tháng/năm)
CREATE OR ALTER FUNCTION FUNC_CAU2 (@MANHANVIEN nvarchar(50), @NGAY nvarchar(10))
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM HOADON
WHERE MaNV = @MANHANVIEN
AND FORMAT(NgayLap, 'dd/MM/yyyy') = @NGAY
);
--3. Tạo hàm tính tổng tiền của từng hóa đơn với mã hóa đơn là tham số đầu vào
CREATE OR ALTER FUNCTION FUNC_CAU3 (@MAHOADON nvarchar(50))
RETURNS float
AS
BEGIN
DECLARE @TONGTIEN float;
RETURN @TONGTIEN;
END;
--4. Tạo hàm lấy danh sách nhà cung cấp theo mã hàng
CREATE OR ALTER FUNCTION FUNC_CAU4 (@MAHANG nvarchar(50))
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM NHACUNGCAP
WHERE MaNCC IN (SELECT MaNCC
FROM PHIEUNHAP
WHERE MaPN IN (SELECT MaPN
FROM CT_PHIEUNHAP
WHERE MAHH = @MAHANG)
)
);
--6. Cho danh sách các khách hàng ở một quận nào đó
CREATE OR ALTER FUNCTION FUNC_CAU6 (@QUAN nvarchar(50))
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM NHANVIEN
WHERE QueQuan LIKE '%' + @QUAN + '%'
);