Ví dụ 4: Thủ tục thống kê ngày sinh đối với mỗi nhân viên với tham số truyền vào là 1 ngày khoảng thời gian ngày sinh (từ ngày, đến ngày). Thủ tục liệt kê mã nhân viên, họ tên nhân viên, ngày sinh, SDT, địa chỉ.
Createproc sp_ThongKeNgaySinhNV @tungay datetime, @denngay datetime As
Select MaNV, HoTen, NgaySinh, DienThoai, DiaChi
From Nhanvien
Where NgaySinh>=@tungay and NgaySinh<=@denngay
62 | P a g e
--Thực thi
exec sp_ThongKeNgaySinhNV'01/01/1980' , '01/01/1990'
Kết quả:
Hình 4. 15: Kết quả thực thi
Ví dụ 5: Viết thủ tục cho biết danh sách các nhân viên nơi sinh ở TP.HCM
Createproc proc_Nhanvien
As Select * From Nhanvien Where NoiSinh='TP.HCM' --Thực thi exec proc_Nhanvien Kết quả: Hình 4. 16: Kết quả thực thi
Ví dụ 6: Xem thơng tin nhân viên gồm mã nhân viên, họ tên, ngày sinh, ngày vào làm theo khoảng thời gian từ ngày đến ngày do người dùng yêu cầu.
createproc pr_thongtinnhanvien1(@NgayBatDau NCHAR(10), @NgayKetThuc
NCHAR (10))
as begin
63 | P a g e
if EXISTS(select NgayVaoLam from Nhanvien where @NgayKetThuc >=NgayVaoLam and NgayVaoLam>= @NgayBatDau)
begin
select MaNV, HoTen, NgaySinh, NgayVaoLam
from Nhanvien
where @NgayKetThuc>= NgayVaoLam and NgayVaoLam>= @NgayBatDau
groupby MaNV, HoTen, NgaySinh, NgayVaoLam
end else
print N'Ngày vào làm không hợp lệ'
end -- thực thi exec pr_thongtinnhanvien1'2018-04-15 00:00:00.0000000', '2018-06-15 00:00:00.0000000' exec pr_thongtinnhanvien1'2016-08-08 00:00:00.0000000', '2018-05-03 00:00:00.0000000' Kết quả: Hình 4. 17: Kết quả thực thi 4.5 Function 4.5.1 Cú pháp function
Create Function Tên_hàm [(Khai báo các tham số)] Returns Kiểu_dữ_liệu_trả_về
64 | P a g e Begin Các_câu_lệnh Return End 4.5.2 Áp dụng
Ví dụ 1:Viết hàm cho biết số lượng đơn đặt hàng với tham số truyền vào là mã nhân viên
CREATEFUNCTION F_SL_MANV(@MaNV NCHAR(6))
RETURNSINT AS
BEGIN
DECLARE @SoLuong INT
SELECT @SoLuong= COUNT(SoPX) FROM Phieuxuat WHERE MaNV =@MaNV
GROUPBY MaNV
RETURN @SoLuong
END
--Xóa
dropfunction F_SL_MANV
--Thực thi
select dbo. F_SL_MANV('NV05')
-- Thực thi c2
print N'số lượng đơn hàng của nhân viên mã số NV05 là: '+ convert(varchar, dbo.F_SL_MANV('NV05'))
65 | P a g e
Hình 4. 18: Kết quả thực thi
Ví dụ 2: Viết hàm xem danh sách các sản phẩm theo Loại sản phẩm (trả về dạng bảng)
CREATEFUNCTION F_DANHSACHSANPHAM(@LoaiSP NvarCHAR(50))
returnstable as
return (select *from Sanpham where MaloaiSP = @LoaiSP)
--Thực thi
select * from F_DANHSACHSANPHAM('BG01')
Kết quả:
Hình 4. 19: Kết quả thực thi 4.6 Trigger
4.6.1 Cú pháp trigger
Create Trigger [ schema_name . ] trigger_name
On { table | view } [ With [ Encryption | Exxcute As Clause ]] {
For | After | Instead Of } { [ Insert ] [ , ] [Update ] [ , ] Delete] } [ Not For Replication] As { sql_statement [ ; ] [ ,...n ]
66 | P a g e
4.6.2 Áp dụng
Ví dụ 1: Số lượng nhập của mỹ phẩm phải lớn hơn hoặc bằng 0
Createtrigger tg_SoLuongnhap
On CTPhieunhap
ForInsert, Update
As
If exists(Select * From inserted Where inserted.Soluong<0)
Begin
print(N'Số lượng nhập phải lớn hơn hoặc bằng 0')
rollbacktran End
--Trigger được kích hoạt khi có lệnh Update vào bảng CTphieunhap
Update CTPhieunhap Set Soluong= 10 Where SoPN='PN005' Kết quả: Hình 4. 20: Kết quả thực thi Kết quả
67 | P a g e
Hình 4. 21: Kết quả update_trigger
Ví dụ 1: Số lượng nhập phải lớn hơn 10 và nhỏ hơn 25
CreateTrigger tg_SoLuongnhaphang3
On CTphieunhap
ForInsert, Update
As
If exists(Select * From inserted
Where inserted.Soluong<10 or inserted.Soluong >25) Begin
68 | P a g e
Print(N'Số lượng nhập hàng phải lớn hơn 10 và nhỏ hơn 25') rollbacktran
End
--Trigger được kích hoạt khi có lệnh Update vào bảng CTphieunhap
Update CTphieunhap Set SoLuong=12 Where MaSP=N'SP04' Kết quả Hình 4. 22: Kết quả thực thi Kết quả
69 | P a g e