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 = @DiaChi và ThanhPho = @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’ và @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!