1. Thủ tục lưu trữ PROCEDURE

Thủ tục procedure là một hàm chứa nhiều câu lệnh được lưu lại trong cơ sở dữ liệu. Các câu lệnh được lưu lại trong thủ tục procedure hoàn toàn có thể sử dụng lại nhiều lần khi chúng được gọi ra. Vì vậy, các câu truy vấn cần phải viết đi viết lại nhiều lần có thể được lưu trong thủ tục procedure để tiện lợi hơn khi chỉ cần gọi ra và sử dụng lại chúng.

Thủ tục procedure là một hàm số nên ta hoàn toàn có thể truyền các tham số vào trong hàm này để phục vụ cho việc kiếm tra và lựa chọn dữ liệu theo tham số.

Cú pháp của thủ tục lữu trữ procedure như sau:

CREATE PROCEDURE procedure_name
AS
sql_statement

Khi một thủ tục đã được tạo ra, để chạy được thủ tục đó ta cần sử dụng câu lệnh sau:

EXEC procedure_name;

Nếu ta cần xóa đi một thủ tục đã được tạo, có thể sử dụng câu lệnh sau:

DROP PROCEDURE procedure_name;

2. Ví dụ thủ tục PROCEDURE

Dưới đây là bảng có tên KhachHang bao gồm các cột: ID, TenKH, DiaChi, ThanhPho, SoDienThoai

ID TenKH DiaChi ThanhPho SoDienThoai
1 Nguyen Van A Tay Ho Ha Noi 0888999888
2 Nguyen Van B Quan 5 Ho Chi Minh 0988988988
3 Nguyen Van C Quan 7 Ho Chi Minh 0899899899
4 Nguyen Van D Bac Tu Liem Ha Noi 0788788788
5 Nguyen Van E Ngo Quen Hai Phong 0858585858
6 Nguyen Van F Ngu Hanh Son Da Nang 0969696969
7 Nguyen Van G Tay Ho Ha Noi 0838383838

2.1 Thủ tục PROCEDURE không có tham số

Câu lệnh SQL sau tạo một thủ tục được lưu trữ có tên “ChonKhachHang” bên trong thủ tục này sẽ là câu lệnh truy vấn chọn ra bản ghi có trường ID = 1 từ bảng KhachHang, câu lệnh tạo thủ tục này như sau:

CREATE PROCEDURE ChonKhachHang
AS
SELECT * FROM KhachHang WHERE ID = 1

Sau khi thực hiện chạy câu lệnh thủ tục trên, một thủ tục có tên ChonKhachHang đã được tạo ra, để sử dụng thủ tục này ta cần sử dụng cú pháp sau:

EXEC ChonKhachHang;

Kết quả:

ID TenKH DiaChi ThanhPho SoDienThoai
1 Nguyen Van A Tay Ho Ha Noi 0888999888

Để xóa đi đi thủ tục vừa tạo ở trên, câu lệnh sẽ như sau:

DROP PROCEDURE ChonKhachHang;

2.2 Thủ tục PROCEDURE có tham số

Câu lệnh SQL dưới đây tạo ra một thủ tục lưu trữ có tên “KhachHangTheoThanhPho“. Trong thủ tục này sẽ có tham số @ThanhPho để làm điều kiện chọn ra các bản ghi trong bảng KhachHang sao cho có cột ThanhPho = @ThanhPho như sau:

CREATE PROCEDURE KhachHangTheoThanhPho @ThanhPho NVARCHAR(50)
AS
SELECT * FROM KhachHang WHERE ThanhPho = @ThanhPho

Thực thi thủ tục KhachHangTheoThanhPho vừa được tạo ở trên với tham số @ThanhPho = ‘Ha Noi’, ta sẽ nhận được kết quả sau:

EXEC KhachHangTheoThanhPho @ThanhPho = 'Ha Noi';

Kết quả:

ID TenKH DiaChi ThanhPho SoDienThoai
1 Nguyen Van A Tay Ho Ha Noi 0888999888
4 Nguyen Van D Bac Tu Liem Ha Noi 0788788788
7 Nguyen Van G Tay Ho Ha Noi 0838383838

Ta hoàn toàn có thể truyền vào thủ tục với nhiều hơn 1 tham số, có thể là 2 tham số được truyền vào, hoặc nhiều tham số hơn được truyền vào.

Ví dụ tiếp theo đây sẽ tạo ra một thủ tục có tên “KhachHangDiaChiThanhPho“. Trong thủ tục này sẽ có 2 tham số đó là @DiaChi và tham số @ThanhPho để làm điều kiện chọn ra các bản ghi trong bảng KhachHang có cột DiaChi = @DiaChiThanhPho = @ThanhPho như sau:

CREATE PROCEDURE KhachHangDiaChiThanhPho @DiaChi NVARCHAR(50), @ThanhPho NVARCHAR(50)
AS
SELECT * FROM KhachHang 
WHERE DiaChi = @DiaChi AND ThanhPho = @ThanhPho;

Thực thi thủ tục KhachHangDiaChiThanhPho vừa được tạo ở trên với tham số @DiaChi = ‘Tay Ho’ @ThanhPho = ‘Ha Noi’, ta sẽ nhận được kết quả sau:

EXEC KhachHangDiaChiThanhPho @DiaChi = 'Tay Ho', @ThanhPho = 'Ha Noi';

Kết quả:

ID TenKH DiaChi ThanhPho SoDienThoai
1 Nguyen Van A Tay Ho Ha Noi 0888999888
7 Nguyen Van G Tay Ho Ha Noi 0838383838

Chú ý: Kiểu dữ liệu của tham số @DiaChi, @ThanhPho được truyền vào thủ tục phải có cùng kiểu dữ liệu với các cột DiaChi, ThanhPho trong bảng KhachHang!