Bài 8: Thủ tục Stored Procedure • Tìm hiểu về thủ tục trong SQL • Cú pháp tạo, sửa, xóa thủ tục • Ý nghĩa các tham số EXECUTE AS... Tìm hiểu về Stored Procedure SP• Khái niệm: Stored Pro
Trang 1Bài 8: Thủ tục (Stored Procedure)
• Tìm hiểu về thủ tục trong SQL
• Cú pháp tạo, sửa, xóa thủ tục
• Ý nghĩa các tham số EXECUTE AS
Trang 21 Tìm hiểu về Stored Procedure (SP)
• Khái niệm: Stored Procedure là một đối tượng trong SQL Server, gồm một nhóm câu lệnh Transact-SQL đã được compiled (biên
dịch), được xử lý như một đơn vị
• Bắt đầu được bổ sung từ SQL 2000
Trang 3Ưu điểm của SP
- Hiệu quả (Performance): SP được biên dịch (compile) và lưu trữ
ngay trong database server Do đó:
+ Không cần kiểm tra quyền (permission) của các câu lệnh đơn lẻ
+ Không cần kiểm tra lại cú pháp và tạo kế hoạch thực thi
+ Giảm lưu lượng mạng: Không cần gửi nhiều câu lệnh SQL dài dòng, chỉ cần gửi tên SP và nhận kết quả trả về
- Lập trình (Programming Framework)
+ Dễ bảo trì
- Bảo mật (Security )
+ Che dữ liệu của bảng
+ SP có thể được mã hóa (encrypt ) để tăng tính bảo mật
3
Trang 5Các loại Stored Procedure
• System Stored Prcedure
+ Chứa trong master DB
+ SQL cung cấp hàng nghìn SP hệ thống Chủ yếu dùng trong việc
quản lý database (administration) và security
+ Liệt kê các sp hệ thống trong CSDL master
select * from sysobjects where xtype ='P'+ Ví dụ thủ tục sp_addtype dùng để tạo kiểu dữ liệu mới
• Local Stored Procedure
+ Được viết bởi DBA hoặc Programmer
+ Lưu trong User Database
5
Trang 6Các loại Stored Procedure
• Temporary Stored Procedure
+ Được lưu trong TemDB
+ Sẽ bị xóa khi connection tạo ra chúng bị đóng hoặc SQL Server
Shutdown
• Extended Stored Procedure
+ Là một loại stored procedure của một chương trình ngoại vi (external program) có thể viết bởi C, C++, được biên dịch thành một DLL
+ Lời gọi thủ tục này có cú pháp giống gọi SP của SQL
+ Thường bắt đầu bằng xp_
• Remote Stored Procedure
+ Là các stored procedure gọi stored procedure ở server khác
+ Ví dụ: sp_who @loginame=’DomainNameAdministrators’
Trang 7Khai báo thủ tục
Cú pháp:
CREATE PROC [ EDURE ] [ schema ]procedure_name
[ {@parameter data_type } [= default] [ OUTPUT ] ]
Trang 8- @return_status = giá trị trả về của SP Nếu hàm không có giá trị trả về
@return_status = 0 (Thủ tục thực thi không lỗi).
Trang 10VD: Tìm số lớn nhất trong 3 số a,b,c
Use Test
CREATE PROCEDURE dbo.MaxABC
@a real=1, @b real=9, @c real=10, @max real output
declare @max real,@return_status real
exec @return_status = dbo.maxabc 100, default, default, @max output
print @max
print @return_status
Trang 13Thủ tục phân trang các bản ghiCREATE PROCEDURE sp_PagedItems ( @Page int, @RecsPerPage int)
AS
CREATE TABLE #TempItems (ID int IDENTITY, Name varchar(50), Price money) INSERT INTO #TempItems (Name, Price)
SELECT Name, listPrice
FROM Adventureworks.Production.Product ORDER BY listPrice
DECLARE @FirstRec int, @LastRec int
SET @FirstRec = (@Page - 1) * @RecsPerPage +1
SET @LastRec = (@Page * @RecsPerPage )
SELECT *, MoreRecords =( SELECT COUNT(*)
FROM #TempItems TI WHERE TI.ID > @LastRec) FROM #TempItems WHERE ID >= @FirstRec AND ID <= @LastRec go
Exec sp_pagedItems 2, 10
Trang 14SET @PageNumber = @PageNumber -1
SET @RowStart = @PageSize * @PageNumber + 1;
SET @RowEnd = @RowStart + @PageSize - 1;
With Cust AS ( SELECT CustomerID, CompanyName,
ROW_NUMBER() OVER (order by CompanyName) as
RowNumber FROM Customers )
Select * from Cust Where RowNumber >= @RowStart and
RowNumber <= @RowEnd
END
exec GetCustomersByPage 10, 1
Trang 17IF NOT EXISTS (SELECT * FROM sys.objects WHERE
object_id = OBJECT_ID(N'[dbo].[AuditTable]') AND type in (N'U'))
CREATE TABLE [dbo].[AuditTable](
[UserName] [nchar](20) COLLATE Vietnamese_CI_AI NULL,
[DateTimeLogin] [datetime] NULL
) ON [PRIMARY]
INSERT INTO [AuditTable] values(user_name(),getdate())
exec sp_procoption N'StartUpProcAudit', N'startup', N'true'
Trang 18Bài tập 1
Cho một xâu kí tự là một tập hợp các phần tử viết cách nhau bởi một dấu ‘.’
Mỗi phần tử gồm có bảy thành phần, các thành phần viết cách nhau một dấu ‘;’
Ví dụ:Mã Hóa Đơn, Người Nhập, Ghi Chú, Mã Sản Phẩm; Tên Sản Phẩm; Số lượng; Đơn giá.
- Viết thủ tục hoặc hàm phân tích xâu kí tự trên và lấy ra các hóa đơn sau đó Insert vào bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu, MaSP, TenSP,
Soluong,DonGia)
Trang 19Bài tập 2
- Cho một file dữ liệu Input.txt gồm các xâu kí tự như trong bài tập 1
- Giả sử có hai bảng: DMSanPham(MaSP, TenSP) và bảng NhapHangHoa
(MaHD, NguoiNhap, GhiChu, MaSP, Soluong, DonGia)
- Hãy viết thủ tục hoặc hàm phân tích từng xâu kí tự trong file:
- Nếu MaSP chưa có trong DMSanPham(MaSP, TenSP) thì ta chèn MaSP và TenSP vào bảng này.
- Chèn các giá trị MaHD, NguoiNhap, GhiChu, MaSP, SoLuong, DonGia lấy được từ xâu vào bảng NhapHangHoa.
Trang 20Bài tập 3
- Cho một file dữ liệu Input.txt như trong bài tập 3
- Giả sử có ba bảng: DMSanPham(MaSP, TenSP), bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu) và bảng NhapHangHoaChiTiet (MaHD, MaSP,
Soluong,DonGia)
- Hãy viết thủ tục hoặc hàm phân tích từng xâu kí tự trong file:
- Nếu MaSP chưa có trong DMSanPham(MaSP, TenSP) thì ta chèn MaSP và TenSP vào bảng này.
- Nếu MaHD chưa có trong bảng NhapHangHoa thì chèn giá trị MaHD,
NguoiNhap, GhiChu vào bảng này
- Chèn các giá trị MaHD,MaSP,SoLuong,DonGia vào bảng
NhapHangHoaChiTiet
Trang 21So sánh hiệu năng vòng while
• declare @d1 decimal, @d2 decimal, @d3 decimal, @i int