Giới thiệu FUNCTION trong SQL Server

Trong phần này chúng ta sẽ tìm hiểu đến function trong SQL Server, đây là chức năng giúp ta gom các câu lệnh SQL thành một nhóm và có thể sử dụng lại nhiều lần.

Lưu ý: function hai còn gọi là hàm.

1. Function trong SQL Server là gì?

Nếu nói đến gom nhóm và sử dụng nhiều lần thì stored procedure cũng làm được, tuy nhiên procedure sẽ không có giá trị trả về, còn function thì sẽ có giá trị trả về. SQL Server cũng có rất nhiều hàm có sẵn như hàm nối chuỗi (concat), hàm tính giá trị căn bậc hai (sqrt).

Các hàm sẽ giúp đơn giản hóa chương trình và có thể sử dụng nhiều lần. Ví dụ bạn cần viết một loạt các câu lệnh SQL phức tạp lên đến hàng ngàn dòng thì có thể phân tích và chia nhỏ thành nhiều hàm 

Cú pháp tạo hàm như sau:

CREATE FUNCTION function_name (parameter_list)
RETURN data_type AS
BEGIN
    statements
    RETURN value
END

Trong đó:

  • function_name là tên của function
  • parameter_list là danh sách các tham số truyền vào function
  • RETURN data_type AS là xác định kiểu dữ liệu mà function sẽ trả về
  • statements là danh sách các lệnh SQL
  • RETURN value là giá trị sẽ được trả về.

Trong ví dụ dưới đây là một function có chức năng tính tổng của hai số.

CREATE FUNCTION tinh_tong(
    @a INT,
    @b INT
)
RETURNS INT
AS 
BEGIN
    RETURN @a * @b;
END;

Hoặc dựa vào database mẫu mình viết một function như sau:

CREATE FUNCTION sales.udfNetSale(
    @quantity INT,
    @list_price DEC(10,2),
    @discount DEC(4,2)
)
RETURNS DEC(10,2)
AS 
BEGIN
    RETURN @quantity * @list_price * (1 - @discount);
END;

Hàm này sẽ tính giá của một sản phẩm sau khi được giảm.

Sau khi chạy khởi tạo hàm này thì bạn sẽ thấy nó trong SSMS bằng cách click vào Programmability > Functions > Scalar-valued Functions.

2. Cách gọi function trong SQL Server

Về cách dùng thì cũng như các hàm có sẵn của SQL Server, bạn chỉ cần gọi tên và truyền tham số vào (nếu có).

SELECT 
    tinh_tong(10, 20) tong

Hoặc bạn thử chạy hàm thứ hai ở trên trong database mẫu;

SELECT 
    sales.udfNetSale(10,100,0.1) net_sale

Thì kết quả sẽ như hình sau:

Bây giờ hãy áp dụng nó vào câu lệnh select để hiện thị giá cho mỗi sản phẩm nằm trong table order_items.

SELECT 
    order_id, 
    SUM(sales.udfNetSale(quantity, list_price, discount)) net_amount
FROM 
    sales.order_items
GROUP BY 
    order_id
ORDER BY
    net_amount DESC;

Kết quả sẽ như hình sau:

3. Sửa function trong SQL Server

Tương tự như Stored Procedure, để chỉnh sửa function thì bạn sử dụng cú pháp sau:

ALTER FUNCTION [schema_name.]function_name (parameter_list)
    RETURN data_type AS
    BEGIN
        statements
        RETURN value
    END

Nội dung mới của function sẽ thay thế nội dung cũ. Lệnh nay chỉ sửa được với những function mà do chính bạn tạo ra thôi nhé, không thể sửa các function có sẵn như count, concat.

4. Xóa function trong SQL Server

Để xóa một function nào đó thì bạn sử dụng lệnh DROP FUNCTION với cấu trúc như sau:

DROP FUNCTION [schema_name.]function_name;

Ví dụ mình muốn xóa function đã tạo ở trên thì chạy lệnh sau:

DROP FUNCTION sales.udfNetSale;

Tương tự, bạn chỉ có thể xóa function do bạn tự tạo.

Một vài lưu ý khác

Mỗi function có thể sử dụng ở bất cứ đâu trong câu lệnh T-SQL và nằm trong phạm vi database.

Có thể có nhiều tham số, tuy nhiên chỉ trả về được một giá trị duy nhất, bắt buộc phải return.

Có thể sử dụng mọi câu lệnh T-SQL bên trong function.

Function này có thể sử dụng function khác

Khóa học đang giảm giá:

Nguồn: freetuts.net