Viết hàm Scalar valued function SQL Server

Viết hàm Scalar valued function SQL Server

  1. Hàm Scalar-valued Function trong SQL Server là gì?
  2. Cú pháp chung hàm Scalar-valued Function trong SQL Server
  3. Một số ví dụ tạo Scalar-valued function
  4. Đặc điểm chính Scalar-valued function

1. Hàm Scalar-valued Function trong SQL Server là gì?

Scalar-valued function là một loại hàm do người dùng định nghĩa (User-defined Function - UDF) trong SQL Server, dùng để trả về một giá trị đơn lẻ (scalar) như int, float, nvarchar, datetime, v.v..

2. Cú pháp chung hàm Scalar-valued Function trong SQL Server

Cách viết hàm

CREATE FUNCTION TenHam (@ThamSo KieuDuLieu, ...)
RETURNS KieuTraVe
AS
BEGIN
    -- Khai báo biến (nếu cần)
    -- Viết logic xử lý
    RETURN GiaTri
END

Cách sử dụng hàm

SELECT dbo.TenHam(@ThamSo1, @ThamSo2, ...) AS TenCot

🔸 dbo là schema mặc định. Nếu bạn tạo hàm trong schema khác thì thay bằng tên schema đó.

3. Một số ví dụ tạo Scalar-valued function

Ví dụ 1 -  Scalar-valued function

🧪 Hàm kiểm tra chẵn lẻ

CREATE FUNCTION fn_KiemTraChanLe (@n INT)
RETURNS NVARCHAR(10)
AS
BEGIN
    IF @n % 2 = 0
        RETURN N'Chẵn'
    ELSE
        RETURN N'Lẻ'
END


Cách dùng:

SELECT dbo.fn_KiemTraChanLe(7) AS KetQua;

Ví dụ 2 -  Scalar-valued function

🧪 Hàm tính tuổi từ ngày sinh

CREATE FUNCTION fn_TinhTuoi (@NgaySinh DATE)
RETURNS INT
AS
BEGIN
    RETURN DATEDIFF(YEAR, @NgaySinh, GETDATE())
           - CASE WHEN MONTH(@NgaySinh) > MONTH(GETDATE())
                   OR (MONTH(@NgaySinh) = MONTH(GETDATE()) AND DAY(@NgaySinh) > DAY(GETDATE()))
                 THEN 1 ELSE 0 END
END

Cách dùng:

SELECT dbo.fn_TinhTuoi('2000-06-30') AS Tuoi;


🔧 Một số lưu ý:

    Hàm scalar không được dùng để thao tác dữ liệu như INSERT, UPDATE, DELETE.
    Có thể dùng trong SELECT, WHERE, JOIN, ORDER BY, v.v.
    Hàm phải được gọi với dbo.TenHam(...) nếu để mặc định schema. 

Hàm Scalar valued function SQL Server là hàm trả về một giá trị duy nhất được xử lý từ các câu lệnh sql server

Ví dụ:
GO
/****** Object:  UserDefinedFunction [dbo].[getTenLop]    Script Date: 24/03/2023 20:11:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Create date: 2023-3-24
-- Description:    <Description, ,>
-- =============================================
-- TEST:  Select [dbo].[getTenLop]('1')
ALTER FUNCTION [dbo].[getTenLop]
(
    -- Add the parameters for the function here
    @Lop nvarchar(50)
)
RETURNS nvarchar(100)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @ResultVar nvarchar(100)
    
    -- Add the T-SQL statements to compute the return value here
    SELECT @ResultVar = (Select TenLop From tbLop Where Lop=@Lop)

    -- Return the result of the function
    RETURN @ResultVar

END  

4. Đặc điểm chính Scalar-valued function 

Đặc điểm Mô tả
Trả về Một giá trị duy nhất (không phải bảng)
Tham số đầu vào Có thể có hoặc không
Dùng được trong SELECT, WHERE, ORDER BY, JOIN, v.v.
Không được phép INSERT, UPDATE, DELETE, MERGE trong thân hàm
Định nghĩa một lần, dùng nhiều lần Giúp tái sử dụng logic xử lý

 Tìm kiếm:

Bài viết liên quan:

Viết hàm Scalar valued function SQL Server