You are on page 1of 16

SQL Stored procedure

Nguyễn Thị Hậu

1

Thủ tục được lưu là gì ? • Thủ tục được lưu là một nhóm câu lệnh TransactSQL đã được compiled (biên dịch) và chứa trong SQL Server dưới một tên nào đó và được xử lý như một đơn vị (chứ không phải nhiều câu SQL riêng lẻ) 2 .1.

SQL server biên dịch các thủ tục được lưu một lần. Giảm lưu lượng thông tin cần trao đổi giữa client/server : Thủ tục được lưu biến các truy vấn SQL dài thành một dòng lệnh ngắn 3 .Tăng khả năng thực thi do biên dịch trước : Khi thực thi một câu lệnh SQL thì SQL Server phải kiểm tra permission xem user gởi câu lệnh đó có được phép thực hiện câu lệnh hay không đồng thời kiểm tra cú pháp rồi mới tạo ra một execute plan và thực thi.Nếu thủ tục được lưu được gọi nhiều lần thì execute plan có thể được sử dụng lại nên sẽ làm việc nhanh hơn.2. ii.Ưu điểm của thủ tục được lưu i.

2. Tăng khả năng kiểm soát an ninh : người dùng có thể tạo quyền thực thi một thủ tục được lưu độc lập hoàn toàn với các quyền liên quan đến các bảng cơ sở. Sử dụng lại mã chương trình một cách hiệu quả : Thủ tục được lưu được sử dụng lại bởi nhiều người dùng và chương trình. iv. 4 .Ưu điểm của stored procedure iii.

5 . Các kiểu thủ tục được lưu i.3. Các thủ tục được lưu hệ thống • Các thủ tục được lưu hệ thống đưa ra các kỹ thuật cho việc quản trị hệ thống. Các thủ tục được lưu hệ thống được đặt trong cơ sở dữ liệu master. • Tất cả các thủ tục được lưu hệ thống có tên bắt đầu bằng ‘sp_’. Các thủ tục được lưu hệ thống hành động như các lối tắt để lấy thông tin từ các bảng hệ thống. và cập nhật các bảng.

Các kiểu thủ tục được lưu Tên thủ tục sp_databases sp_server_info sp_stored_procedures sp_tables sp_password sp_help sp_helptext Mô tả Liệt kê tất cả các cơ sở dữ liệu được cung cấp trên server. hoặc một thủ tục được lưu. Liệt kê các thông tin server. trigger hoặc view không được mã hóa. Liệt kê tất cả các đối tượng có thể được truy xuất trong môi trường hiện tại. hàm người dùng định nghĩa. Thay đổi mật khẩu của tài khoản đăng nhập Hiển thị thông tin về đối tượng cơ sở dữ liệu bất kỳ Hiển thị văn bản thực sự của một rule. một default.3. Liệt kê tất cả các thủ tục được lưu được cung cấp trên môi trường hiện tại. 6 .

3. Cú pháp: CREATE PROC[EDURE] ten_thu_tuc @ten_bien kieu_du_lieu AS …. Các kiểu thủ tục được lưu ii. Các thủ tục được lưu người dùng định nghĩa. vd : Một thủ tục được lưu tên là DanhSachSV hiển thị thông tin về các sinh viên: CREATE PROCEDURE DanhSachSV AS PRINT ‘Thong tin ve sinh vien’ SELECT * FROM SinhVien 7 .

3. Các kiểu thủ tục được lưu Thủ tục được lưu có tham số : CREATE PROC[EDURE] ten_thu_tuc @ten_bien kieu_du_lieu [=gia_tri_mac_dinh] AS …. vd : Một thủ tục được lưu tên là ThôngtinSV hiển thị thông tin về một sinh viên: CREATE PROCEDURE ThôngtinSV @maSV varchar(10) AS Print ‘Thong tin ve sinh vien’ Select * From SinhVien Where MaSV=@maSV 8 .

Thực thi thủ tục được lưu Cú pháp: EXEC[UTE] ten_thu_tuc Ví dụ. câu lệnh để thực thi thủ tục được lưu ThongtinSV như sau: EXECUTE ThongtinSV ‘111002’ 9 .4.

10 . Nó làm chậm việc thực thi thủ tục. Chỉ định WITH RECOMPILE với CREATE PROCEDURE CREATE PROCEDURE ten_thu_tuc @ten_bien kieu_du_lieu WITH RECOMPILE AS …. Sử dụng thủ tục được lưu hệ thống sp_recompile : để bắt một thủ tục được lưu biên dịch lại ở lần chạy tiếp theo.5. Cú pháp: sp_recompile [@objectname =] ‘object’ ví dụ : sp_recompile DanhsachSV ii. SQL Server sẽ dịch lại thủ tục mỗi khi nó thực thi. Biên dịch lại các thủ tục được lưu Có ba cách để biên dịch lại các thủ tục: i.

Biên dịch lại các thủ tục được lưu iii. Cú pháp: EXEC[CUTE] ten_thu_tuc WITH RECOMPILE 11 . Sử dụng phương pháp này để biên dịch lại khi dữ liệu đã thay đổi nhiều sau khi thủ tục được tạo. Chỉ định WITH RECOMPILE với EXECUTE SQL server sẽ biên dịch lại một lần cho thủ tục.5.

12 . Cú pháp của câu lệnh này tương tự như CREATE PROCEDURE : ALTER PROC[EDURE] ten_thu_tuc @ten_bien kieu_du_lieu WITH RECOMPILE AS …. Sửa đổi các thủ tục được lưu SQL Server cung cấp câu lệnh ALTER PROCEDURE để sửa đổi các thủ tục được lưu.6.

Cú pháp: SET @local_variable_name = value Hoặc SELECT @local_variable_name = value Vd : DECLARE @maSV varchar(10) SET @maSV = ‘SV11002’ 13 . Biến cục bộ .7.Tên của các biến cục bộ phải được đặt trước bởi ký hiệu ‘@’ Cú pháp: DECLARE @Ten_biem Kieu_du_lieu DECLARE @maSV varchar(10) .Thiết lập một giá trị cho các biến đã được khai báo (sử dụng SET hoặc SELECT).

Các cấu trúc điều khiển • BEGIN các câu lệnh SQL END • RETURN [ gia_tri] • While bieu_thuc_dieu_kien {các câu lệnh SQL [BREAK | CONTINUE] } • If bieu_thuc_dieu_kien {các câu lệnh SQL} [Else {các câu lệnh SQL}] 14 .8.

Các cấu trúc điều khiển • CASE bieu_thuc WHEN giatri1 THEN cac_cau_lenh WHEN giatri2 THEN cac_cau_lenh … ELSE cac_cau_lenh END GoTo ten_nhan • 15 .8.

thông tin về đơn vị và các dự án mà nhân viên đó làm việc cho.Ví dụ 1. 16 . liệt kê tên người giám sát. 2. Viết một thủ tục có tham số là MaDV. tiền lương. tính tổng tiền lương các nhân viên làm việc cho đơn vị đó. Viết một thủ tục có tham số là MaNV.