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

hàm trong sql server 2014

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

Trả lời