Làm Chủ Stored Procedure (Thủ Tục Lưu Trữ) Để Tự Động Hóa Truy Vấn

Cb5a47a3-ece5-4153-ab6a-cc1e7c23b71f

Chúc mừng bạn đã hoàn thành series cơ bản và chính thức bước chân vào thế giới SQL Nâng Cao cùng MCNA Technology School!

Nếu ở cấp độ cơ bản, bạn phải tự gõ lại từng dòng lệnh SQL mỗi khi muốn xuất báo cáo, thì ở cấp độ nâng cao, các chuyên viên dữ liệu sẽ “đóng gói” toàn bộ logic phức tạp đó lại thành một chương trình có thể tái sử dụng chỉ bằng một cú click. Công cụ mạnh mẽ đó chính là Stored Procedure trong SQL.

1. Stored Procedure Trong SQL Là Gì?

Stored Procedure (Thủ tục lưu trữ) là một tập hợp gồm một hoặc nhiều câu lệnh SQL được biên dịch sẵn và lưu trữ trực tiếp trong Cơ sở dữ liệu.

Thay vì gửi từng đoạn code SQL dài hàng trăm dòng từ ứng dụng lên máy chủ Database, bạn chỉ cần gọi tên Stored Procedure để máy chủ tự động thực thi.

Tại sao nên dùng Stored Procedure?

  • Tối ưu hiệu năng: Được hệ thống biên dịch và tối ưu hóa sẵn từ lần chạy đầu tiên, giúp giảm tải CPU và tăng tốc độ xử lý.

  • Tái sử dụng code: Viết logic một lần, gọi thực thi nhiều lần từ bất kỳ đâu.

  • Bảo mật cao: Phân quyền người dùng chỉ được gọi Stored Procedure mà không cần cho phép họ truy cập trực tiếp vào các bảng dữ liệu nhạy cảm.

  • Tự động hóa: Rất thích hợp để lập lịch chạy các báo cáo tự động hàng ngày/hàng tháng.

💡 BẠN CÓ BẾ TẮC VÌ TRUY VẤN CHẠY QUÁ CHẬM TRÊN CƠ SỞ DỮ LIỆU LỚN?

Việc tự học Stored Procedure chỉ là bước đầu. Trong môi trường doanh nghiệp thực tế, bạn sẽ phải xử lý hệ thống hàng triệu dòng dữ liệu, thiết kế luồng tự động hóa báo cáo phức tạp và tối ưu hóa hệ thống để chống giật lag.

🚀 Đồng hành cùng MCNA Technology School trong Khóa học SQL Nâng Cao :

  • 100% Thực chiến: Cầm tay chỉ việc trên hệ quản trị cơ sở dữ liệu doanh nghiệp thực tế.

  • Master công cụ: Tối ưu Stored Procedure, Trigger, Transaction, Indexing và thiết kế Data Warehouse.

  • Mentor 1:1: Đội ngũ chuyên gia dữ liệu nhiều năm kinh nghiệm tại các tập đoàn công nghệ lớn trực tiếp hướng dẫn.

👉 [ĐĂNG KÝ NHẬN TƯ VẤN ] (link đăng ký)

2. Cú Pháp Tạo Và Thực Thi Stored Procedure

2.1. Cú pháp khởi tạo cơ bản

SQL

CREATE PROCEDURE Ten_Thuc_Tuc
AS
BEGIN
    -- Các câu lệnh SQL cần thực thi
    SELECT * FROM HocVien;
END;

2.2. Cú pháp thực thi (Gọi thủ tục)

SQL

EXEC Ten_Thuc_Tuc;
-- Hoặc: EXECUTE Ten_Thuc_Tuc;

3. Stored Procedure Với Tham Số Đầu Vào (Input Parameters)

Điểm mạnh của Stored Procedure là khả năng nhận các tham số truyền vào linh hoạt, giúp bạn biến một câu lệnh tĩnh thành một báo cáo động.

Ví dụ thực tế tại MCNA:

Tạo một Stored Procedure dùng để tra cứu danh sách học viên theo tên khóa học và thành phố:

SQL

CREATE PROCEDURE sp_LayHocVienTheoKhoaHoc
    @TenKhoaHoc NVARCHAR(50),
    @ThanhPho NVARCHAR(50)
AS
BEGIN
    SELECT HoTen, Email, DiemThi
    FROM HocVien
    WHERE KhoaHoc = @TenKhoaHoc 
      AND ThanhPho = @ThanhPho;
END;

Cách gọi thực thi với tham số:

SQL

EXEC sp_LayHocVienTheoKhoaHoc 
    @TenKhoaHoc = N'SQL Nâng Cao', 
    @ThanhPho = N'TP.HCM';

4. Stored Procedure Với Tham Số Đầu Ra (Output Parameters)

Ngoài việc trả về bảng dữ liệu, Stored Procedure còn có thể trả về các giá trị số hoặc biến cụ thể bằng từ khóa OUTPUT.

Ví dụ:

Tạo thủ tục tính tổng số lượng học viên và điểm trung bình của một khóa học:

SQL

CREATE PROCEDURE sp_ThongKeKhoaHoc
    @TenKhoaHoc NVARCHAR(50),
    @TongHocVien INT OUTPUT,
    @DiemTrungBinh FLOAT OUTPUT
AS
BEGIN
    SELECT 
        @TongHocVien = COUNT(MaHV),
        @DiemTrungBinh = AVG(DiemThi)
    FROM HocVien
    WHERE KhoaHoc = @TenKhoaHoc;
END;

5. Bài Tập Thực Hành SQL Nâng Cao (Bài 1)

Hãy áp dụng kiến thức về Stored Procedure trong SQL để giải bài tập tự động hóa quản lý nhân sự dưới đây:

Đề bài: Cho bảng NhanVien (MaNV, HoTen, PhongBan, Luong).

  1. Viết một Stored Procedure tên là sp_CapNhatLuong nhận vào 2 tham số: @MaNV@LuongMoi. Thủ tục này sẽ cập nhật mức lương mới cho nhân viên tương ứng.

  2. Viết câu lệnh thực thi sp_CapNhatLuong để đổi lương của nhân viên có MaNV = 105 thành 20,000,000.

SQL

-- 1. Tạo Stored Procedure cập nhật lương
CREATE PROCEDURE sp_CapNhatLuong
    @MaNV INT,
    @LuongMoi DECIMAL(18,2)
AS
BEGIN
    UPDATE NhanVien
    SET Luong = @LuongMoi
    WHERE MaNV = @MaNV;
    
    PRINT N'Đã cập nhật lương thành công cho nhân viên ' + CAST(@MaNV AS VARCHAR);
END;

-- 2. Thực thi cập nhật lương cho MaNV = 105
EXEC sp_CapNhatLuong 
    @MaNV = 105, 
    @LuongMoi = 20000000;

Tác giả: Huỳnh Trung Hậu

📞 Hotline: 0939.866.825 (Mr. Minh Khang)
🌐 Website: MCNA Technology School
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông
📍 TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu

Chỉ mục