Giới thiệu Store procedure SP là một tập các câu lệnh SQL chương trình được biên dịch và lưu trữ sẵn trên SQL Server SP cho phép - Chứa nhiều câu lệnh, có thể gọi các SP khác - Nhận c
Trang 1STORED PROCEDURE
Trang 3Giới thiệu
Store procedure (SP) là một tập các câu lệnh SQL (chương trình) được biên dịch và lưu trữ sẵn trên SQL Server
SP cho phép
- Chứa nhiều câu lệnh, có thể gọi các SP khác
- Nhận các tham số đầu vào, đầu ra
- Trả về trạng thái thực hiện (thành công hay thất bại) và nguyên nhân
Trang 4Giới thiệu (tt)
Quá trình tạo SP
- Phân tích cú pháp:
Nếu có lỗi cú pháp thì thông báo lỗi và không tạo SP
Ngược lại tạo SP, tên SP lưu ở sysobjects , văn bản lệnh lưu ở
syscomments
Thi hành SP (lần đầu hoặc biên dịch lại)
- Đọc văn bản lệnh ở syscomments
- Phân giải tên : liên kết các đối tượng mà SP tham khảo đến
- Tối ưu hóa : tạo kế hoạch thi hành nhanh nhất dựa vào trạng thái của CSDL và cấu trúc câu lệnh
- Biên dịch : tạo mã thi hành cho kế hoạch đã được tối ưu hóa và đặt trong vùng procedure cache
- Thi hành SP
Trang 5Giới thiệu (tt)
Ưu điểm khi sử dụng SP
- Cho phép các ứng dụng khác nhau dùng chung xử
lý, đảm bảo tính nhất quán trong truy xuất và xử lý
dữ liệu
- Nhanh, giảm lưu lượng mạng
Trang 7 Biến cục bộ: là một đối tượng cụ thể lưu giữ một giá trị
dữ liệu đơn của một kiểu xác định.
- Tên của biến cục bộ được bắt đầu bởi ký hiệu @
- Biến cục bộ được khai báo bằng lệnh DECLARE
- Ví dụ
DECLARE @sl int, @dbname nvarchar(128)
- Biến cục bộ không thể có kiểu dữ liệu là text , ntext
hoặc image
Biến toàn cục (hệ thống): do SQL tạo ra
- Tên bắt đầu bởi ký hiệu @@
- Ví dụ: @@rowcount , @@error
Trang 9<Cau_lenh_SQL |BEGIN < Khoi_lenh lệnh> END >]
SELECT * FROM NHANVIEN
Trang 11[ ELSE <Ket_qua_khac>]
END
SELECT Thu = CASE datepart (w, getdate ()) WHEN 1 THEN 'Chu nhat’ WHEN 2 THEN 'Thu hai'
WHEN 3 THEN 'Thu ba’ WHEN 4 THEN 'Thu tu'
WHEN 5 THEN 'Thu nam’ WHEN 6 THEN 'Thu sau'
WHEN 7 THEN 'Thu bay'
END
Trang 13Lệnh WHILE
Cú pháp
Ví dụ
WHILE <Bieu_thuc_Logic>
<Cau_lenh_SQL | BEGIN <Khoi_lenh> END > [BREAK ]
<Cau_lenh_SQL |BEGIN <Khoi_lenh> END >[ CONTINUE ]
<Cau_lenh_SQL |BEGIN <Khoi_lenh> END >
SET @Dem = 0
BEGIN SET @Dem = @Dem + 1
Trang 15Một số lệnh thông dụng
RETURN [Bieu_thuc_nguyen]
- Dùng để thoát khỏi SP
- Ví dụ
PRINT <Chuoi | @Bien>
- Dùng để xuất kết quả, giá trị ra màn hình
- Ví dụ
PRINT ‘ABC’ PRINT @Dem PRINT GETDATE ()
Trang 17Nội dung chi tiết
Trang 18 Trong SP không được chứa các câu lệnh : CREATE PROCEDURE, CREATE RULE, CREATE VIEW, CREATE TRIGGER
Để thi hành lệnh CREATE PROCEDURE, người dùng phải
là thành viên của một trong các role: sysadmin, db_owner, db_ddladmin hoặc được cấp quyền CREATE PROCEDURE
Trang 19Tạo SP (tt)
Cú pháp
CREATE PROC [ EDURE ] <Ten_Procedure>
[ @<Tham_so> <Kieu_du_lieu> [ = <Gia_tri_mac_dinh> ] [ OUTPUT ] ] [ , n ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
AS
<Cac_cau_lenh_SQL>
Trang 20Tạo SP (tt)
Giải thích
- Ten_Procedure : tên procedure, các SP tạm cục bộ
có ký hiệu # trước tên của SP
- @<Tham_so> : tên tham số của procedure
- <Kieu_du_lieu> : kiểu dữ liệu của tham số
- <Gia_tri_mac_dinh> : giá trị mặc định của tham số
- OUTPUT : cho phép tham số nhận giá trị trả về
- RECOMPILE : nếu có thêm tùy chọn này thì mỗi lần thi hành SQL Server sẽ biên dịch lại SP và mã của
SP không được lưu vào vùng đệm của thủ tục
- ENCRYPTION : nếu có thêm tùy chọn này thì văn bản lệnh được mã hóa và lưu trong syscomments
Trang 21SELECT * FROM nhanvien
EXEC [ UTE ] <Ten_Procedure> [Danh_sach_tham_so]
Trang 23Hiệu chỉnh SP
Cú pháp
Ví dụ
ALTER PROC [ EDURE ] <Ten_Procedure>
[ @<Tham_so> <Kieu_du_lieu> [ = <Gia_tri_mac_dinh> ] [ OUTPUT ] ] [ , n ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
Trang 25Xóa SP
Cú pháp
Ví dụ
DROP PROC [ EDURE ] <Ten_Procedure>
DROP PROC DS_NHANVIEN
Trang 27Xem thông tin về SP
sp_help <Ten_procedure> Danh sách các tham số cùng kiểu dữ liệu
sp_helptext <Ten_procedure> Văn bản lệnh của SP trong trường hợp không mã hóa
sp_depends <Ten_procedure> Liệt kê các đối tượng mà SP tham khảo đến và các đối
tượng tham khảo đến SP
sp_stored_procedures Danh sách các SP trong DB hiện hành
Trang 29Ví dụ 1 – có tham số vào, default
Xem danh sách nhân viên theo phòng
Trang 30Ví dụ 2 – có tham số vào, ra
- DECLARE @SoNVXoa int
OUTPUT
- PRINT 'So mau tin bi xoa:' + str (@SoNVXoa,3)
CREATE PROC XOA_THANNHAN_THEOMANV
@MANV nvarchar(20 ), @SoNVXoa int OUTPUT
AS
DELETE THANNHAN
WHERE MA_NVIEN = @MaNV
SET @SoNVXoa = @@rowcount
Trang 31Ví dụ 3 – có recompile , encryption
Tăng lương cho nhân viên theo phòng lên @Tyle lần
CREATE PROC TANGLUONG_NHANVIEN
@Phong int , @Tyle Decimal(3,1 ), @So_NV_Tang int OUTPUT
WITH RECOMPILE, ENCRYPTION
Trang 32Ví dụ 4 – có chặn lỗi
Thêm phòng ban
CREATE PROC THEM_PHONGBAN @TENPHG NVARCHAR (40),
@MAPHG INT , @TRPHG NVARCHAR (20),
@NG_NHANCHUC SMALLDATETIME , @Loi int OUTPUT AS
BEGIN TRY
INSERT PHONGBAN VALUES (@TENPHG, @MAPHG, @TRPHG, @NG_NHANCHUC) END TRY
BEGIN CATCH
SET @Loi = @@error
RAISERROR ( 'Loi them du lieu', 10,1) RETURN
END CATCH
SET @Loi = @@error