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)
-
Là 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ặcOUTPUT).
🔹 Function (UDF - User Defined Function)
-
Là 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.