Đăng ký để xem nội dung này
Tạo tài khoản miễn phí và đăng ký gói học để truy cập toàn bộ bài học, video và tài liệu độc quyền.
Đăng ký ngay — Miễn phí Đã có tài khoản? Đăng nhậpStored Procedures và Functions
🎓 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.