Hàm trong SQL Server 2014 (Bài 9)
Hàm trong SQL Server 2014 bao gồm 2 loại. Một là hàm có sẵn. Hai là hàm do người dùng định nghĩa (user-defined).
Hàm thuộc database và bao gồm một hoặc nhiều câu lệnh SQL và được tạo ra với mục đích sử dụng lại (reuse). Đối với hàm tự định nghĩa bao gồm 2 loại: Scalar Functions và Table-Valued Functions
Hàm trong SQL Server 2014 – Scalar Functions
Một scalar function là hàm trả về một giá trị với kiểu dữ liệu được khai báo trong RETURNS lúc tạo hàm.
Kiểu dữ liệu trả về là những kiểu dữ liệu đã đề cập trong bài học Tạo Table trong SQL Server 2014 ngoại trừ text, ntext, image, cursor, or timestamp.
Cú pháp tạo Scalar function
CREATE FUNCTION tên_hàm ([@parameter_name parameter_data_type [ = default ] [ ,...n ] ] ) RETURNS kiểu_dữ_liệu AS BEGIN thân hàm RETURN value END
Ví dụ: Tạo scalar function đếm số nhân viên theo phong ban (tên phòng ban là tham số). Hàm này được tạo trong QuanLyNhanSu
CREATE FUNCTION fn_DemSoNhanVien(@TenPhong nvarchar(30)) RETURNS int AS BEGIN DECLARE @ret int; SELECT @ret = count(*) FROM NHANVIEN WHERE TenPhong = @TenPhong; IF (@ret IS NULL) SET @ret = 0; RETURN @ret; END
Hàm sau khi tạo
Sử dụng hàm fn_DemSoNhanVien
Kết quả trên cho thấy, phòng IT có 2 nhân viên.
Hàm trong SQL Server 2014 – Table-Valued Functions
Nếu như scalar function trả về một giá trị (single value) thì table-valued function trả về một table chứa những giá trị từ câu lệnh SELECT.
Cú pháp tạo table-valued function
CREATE FUNCTION tên_hàm ([@parameter_name parameter_data_type [ = default ] [ ,...n ] ] ) RETURNS TABLE AS RETURN câu_lệnh_select;
Ví dụ: tạo table-valued function hiển thị danh sách nhân viên thuộc phòng ban (với tên phòng ban là tham số).
CREATE FUNCTION fn_DanhSachNhanVien (@TenPhong nvarchar(30)) RETURNS TABLE AS RETURN ( SELECT * FROM NHANVIEN WHERE TenPhong = @TenPhong );
Hàm fn_DanhSachNhanVien sau khi tạo
Sử dụng hàm fn_DanhSachNhanVien
Hàm trong SQL Server 2014 – Bài tập thực hành
Sử dụng cơ sở dữ liệu QuanLyBanHang
Tạo các function sau
Câu 1. Viết function tên fn_ThongKeSLDatTheoNhaCungCap, kiểu trả về là table: dùng để lấy tổng số lượng đặt theo từng nhà cung cấp. Ví dụ:
MaNhaCC | Tổng số lượng đặt |
C01 | 30 |
C03 | 25 |
Câu 2. Viết function tên fn_LayThongTinNhaCungCap, kiểu trả về là int và nhận tham số @MaNhaCC: dùng để đếm số hóa đơn của nhà cung cấp. Ví dụ:
MaNhaCC | Tổng số hóa đơn |
C01 | 1 |
C02 | 2 |
Câu 3. Viết function tên fn_LayThongTinPhieuNhap, kiểu trả về float và nhận tham số @SoPN: dùng để tính tổng số tiền nhập của @SoPN. Ví dụ:
SoPN | Tổng tiền |
N001 | 6000000 |
N002 | 6000000 |
Câu 4. Viết function tên fn_LayThongTinPhieuXuat, kiểu trả về int và nhận tham số @year: dùng để đếm số phiếu xuất được lập trong năm @year. Ví dụ:
Năm | Tổng số phiếu xuất |
2007 | 3 |
2016 | 1 |
Câu 5. Viết function tên fn_LayThongTinVatTuTheoPhieuXuat, kiểu trả về table: dùng để đếm số vật tư theo từng phiếu xuất. Ví dụ:
SoPX | Số vật tư |
X001 | 1 |
X002 | 2 |