Bài 1: Giới thiệu về Trình quản lý quảng cáo

🎓 BÀI GIẢNG: STORED PROCEDURE VÀ FUNCTION TRONG MSSQL


1️⃣ Khái niệm

🔹 Stored Procedure (SP)

  • tập hợp các câu lệnh SQL được biên dịch sẵn, lưu trong database dưới dạng đối tượng.

  • Dùng để thực hiện các thao tác như: thêm, sửa, xóa, lấy dữ liệu.

  • Có thể nhận tham số vào và trả về kết quả (dưới dạng SELECT, hoặc OUTPUT).

🔹 Function (UDF - User Defined Function)

  • hàm do người dùng định nghĩa, thực hiện xử lý và trả về giá trị.

  • Có thể là:

    • Scalar Function: trả về 1 giá trị duy nhất.

    • Table-valued Function: trả về một bảng.


2️⃣ Ví dụ về Stored Procedure

🔥 Ví dụ 1: SP lấy danh sách khóa học theo chủ đề

CREATE PROCEDURE sp_GetKhoaHocByChuDe
    @idChuDe INT
AS
BEGIN
    SELECT ID, TenKhoaHoc, ThuTu
    FROM KhoaHoc
    WHERE idChuDe = @idChuDe
END

👉 Gọi SP:

EXEC sp_GetKhoaHocByChuDe @idChuDe = 2

🔥 Ví dụ 2: SP thêm mới chủ đề

CREATE PROCEDURE sp_InsertChuDe
    @ID INT,
    @TenChuDe NVARCHAR(500),
    @ThuTu INT,
    @HinhAnh NVARCHAR(500)
AS
BEGIN
    INSERT INTO ChuDe(ID, TenChuDe, ThuTu, HinhAnh)
    VALUES (@ID, @TenChuDe, @ThuTu, @HinhAnh)
END

🔥 Ví dụ 3: SP dùng OUTPUT để trả lại ID đăng ký mới

CREATE PROCEDURE sp_DangKyKhoaHoc
    @idKhoaHoc INT,
    @idHocVien INT,
    @HocPhi FLOAT,
    @NewID INT OUTPUT
AS
BEGIN
    INSERT INTO DangKyKhoaHoc (idKhoaHoc, idHocVien, ThoiGianDangKy, HocPhi)
    VALUES (@idKhoaHoc, @idHocVien, GETDATE(), @HocPhi)

    SET @NewID = SCOPE_IDENTITY()
END

👉 Gọi SP có OUTPUT:

DECLARE @IDMoi INT
EXEC sp_DangKyKhoaHoc 1, 2, 500000, @NewID=@IDMoi OUTPUT
PRINT 'ID đăng ký mới: ' + CAST(@IDMoi AS NVARCHAR)

3️⃣ Ví dụ về Function

⚡ Ví dụ 4: Scalar Function trả về tổng số khóa học của 1 chủ đề

CREATE FUNCTION fn_CountKhoaHocByChuDe (@idChuDe INT)
RETURNS INT
AS
BEGIN
    DECLARE @Count INT
    SELECT @Count = COUNT(*)
    FROM KhoaHoc
    WHERE idChuDe = @idChuDe
    RETURN @Count
END

👉 Gọi Function: 

SELECT dbo.fn_CountKhoaHocByChuDe(3) AS SoLuongKhoaHoc

⚡ Ví dụ 5: Table-Valued Function trả về danh sách video của 1 khóa học

CREATE FUNCTION fn_GetVideoByKhoaHoc (@idKhoaHoc INT)
RETURNS TABLE
AS
RETURN
(
    SELECT ID, TieuDe, UrlVideo, LuotXem
    FROM Video
    WHERE idKhoaHoc = @idKhoaHoc
)

👉 Gọi Function:

SELECT * FROM dbo.fn_GetVideoByKhoaHoc(1)

4️⃣ So sánh nhanh SP vs Function

Đặc điểm Stored Procedure Function
Trả dữ liệu SELECT, OUTPUT, RETURN INT RETURN value hoặc TABLE
Gọi trong SELECT ❌ Không ✅ Có thể (nếu là Scalar UDF)
Có transaction & xử lý logic phức tạp ✅ Có 🚫 Hạn chế (không BEGIN TRAN COMMIT)
Tham số OUT ✅ Có 🚫 Không

✅ Tổng kết

  • SP: dùng cho các thao tác phức tạp (INSERT/UPDATE/DELETE, multi-query), có thể trả nhiều result set, OUT params.

  • Function: dùng tính toán, xử lý nhẹ, dễ nhúng vào SELECT.

 

 
 

🔥 3 câu hỏi về Stored Procedure

📌 Câu 1

Viết một Stored Procedure lấy danh sách tất cả video của một khóa học theo ID khóa học, sắp xếp theo ThuTu tăng dần.

📌 Câu 2

Viết một Stored Procedure để xóa tất cả đăng ký của một học viên theo ID học viên.

📌 Câu 3

Viết một Stored Procedure nhận vào ID nhân viên quản lý, trả về danh sách các đăng ký mà nhân viên đó đã xác nhận, gồm: ID, idKhoaHoc, idHocVien, ThoiGianXacNhan.


⚡ 3 câu hỏi về Function

📌 Câu 4

Viết một Scalar Function nhận ID học viên, trả về số lượng khóa học mà học viên đó đã đăng ký.

📌 Câu 5

Viết một Scalar Function nhận ID chủ đề, trả về tổng số video thuộc tất cả các khóa học của chủ đề đó.

📌 Câu 6

Viết một Table-valued Function nhận ID nhân viên quản lý, trả về bảng chứa ID, idKhoaHoc, idHocVien, ThoiGianDangKy của tất cả các đăng ký mà nhân viên này đã xác nhận.