Thủ tục được lưu trữ là một nhóm các câu lệnh SQL được biên dịch thành một. Các thủ tục được lưu trữ có thể bao gồm logic nghiệp vụ và các cấu trúc lập trình khác.
Trong SQL Server, thủ tục được lưu trữ là một nhóm gồm một hoặc nhiều câu lệnh Transact-SQL hoặc tham chiếu đến phương thức ngôn ngữ thời gian chạy thông dụng (CLR) của Microsoft .NET Framework.
Khả năng lập trình
Một thủ tục được lưu trữ không chỉ là một tập lệnh dài. Đó là một tập lệnh đã được lưu trong SQL Server cụ thể theo Thủ tục được lưu trữ và nó có thể:
- Chấp nhận các tham số đầu vào (và trả về nhiều giá trị ở dạng tham số đầu ra cho chương trình đang gọi).
- Chứa các câu lệnh lập trình.
- Trả lại một giá trị trạng thái cho một chương trình gọi điện để cho biết sự thành công hay thất bại và lý do của bất kỳ sự thất bại nào.
Các thủ tục được lưu trữ thường chứa logic nghiệp vụ. Ví dụ:một thủ tục được lưu trữ có thể chấp nhận các tham số được truyền cho nó và kiểm tra các tham số đó bằng cách sử dụng IF
các câu lệnh. Ví dụ:nếu tham số là một giá trị, hãy thực hiện điều này, nếu đó là một giá trị khác, hãy thực hiện điều đó.
Các thủ tục được lưu trữ có thể cải thiện hiệu suất trong một ứng dụng, bởi vì thủ tục đã lưu trữ được phân tích cú pháp và tối ưu hóa ngay khi nó được tạo, sau đó được lưu trữ trong bộ nhớ. Chạy một truy vấn có điều kiện thông qua thủ tục được lưu trữ có thể cực kỳ nhanh chóng - so với một ứng dụng gửi một truy vấn qua mạng, tới SQL Server, sau đó có tất cả dữ liệu được trả lại cho nó trên toàn mạng để nó có thể lọc qua và chọn ra chỉ những bản ghi mà nó quan tâm.
Lợi ích của các thủ tục được lưu trữ
Dưới đây là một số lợi ích chính khi sử dụng các thủ tục được lưu trữ:
Lợi ích | Giải thích |
---|---|
Lập trình mô-đun | Bạn có thể viết một quy trình đã lưu trữ một lần, sau đó gọi lại quy trình đó từ các phần khác nhau của ứng dụng (và thậm chí từ nhiều ứng dụng). |
Hiệu suất | Các thủ tục được lưu trữ cung cấp khả năng thực thi mã nhanh hơn và giảm lưu lượng mạng.
|
Bảo mật | Người dùng có thể thực thi một thủ tục được lưu trữ mà không cần thực hiện trực tiếp bất kỳ câu lệnh nào. Do đó, một quy trình được lưu trữ có thể cung cấp chức năng cơ sở dữ liệu nâng cao cho những người dùng thường không có quyền truy cập vào các tác vụ này, nhưng chức năng này được cung cấp theo cách được kiểm soát chặt chẽ. |
Cách tạo một thủ tục được lưu trữ
Để tạo một thủ tục được lưu trữ, hãy sử dụng CREATE PROCEDURE
, theo sau là mã tạo nên thủ tục được lưu trữ. Nếu thủ tục được lưu trữ của bạn sẽ chấp nhận các tham số, chúng cần được bao gồm sau tên.
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
Ví dụ
Đây là một ví dụ về cách tạo một thủ tục được lưu trữ và sau đó thực thi thủ tục đã lưu trữ đó.
-
Tạo thủ tục được lưu trữ
Chạy câu lệnh sau đối với cơ sở dữ liệu Âm nhạc mà chúng tôi đã tạo trong suốt hướng dẫn này.
Ví dụ này tạo ra một thủ tục được lưu trữ có tên là AlbumsFromArtist. Nó chọn tất cả các album từ một nghệ sĩ được chỉ định khi quy trình được lưu trữ chạy.
CREATE PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT AlbumName, ReleaseDate FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE Artists.ArtistName = @ArtistName; GO
-
Xem quy trình đã lưu trữ
Mở rộng Khả năng lập trình> Thủ tục được Lưu trữ trong cơ sở dữ liệu áp dụng để xem thủ tục được lưu trữ mới được tạo của bạn. Bạn cũng có thể mở rộng Tham số của thủ tục được lưu trữ để xem các tham số bạn cần chuyển khi chạy nó.
-
Thực hiện quy trình đã lưu trữ
Bây giờ thủ tục được lưu trữ đã được tạo, bạn có thể chạy nó bằng cách sử dụng
EXECUTE
và chuyển bất kỳ tham số bắt buộc nào.Trong ví dụ của chúng tôi, chúng tôi cần nhập tên của nghệ sĩ.
EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";
Ngoài ra, bạn có thể bỏ qua tên tham số khi truyền tham số. Như thế này:
EXECUTE spAlbumsFromArtist "Devin Townsend";
Thay đổi quy trình đã lưu trữ
Bạn có thể sửa đổi quy trình đã lưu trữ của mình bằng ALTER PROCEDURE
tuyên bố. Giống như khi bạn thay đổi một dạng xem, bạn có thể thay đổi một thủ tục được lưu trữ bằng cách áp dụng định nghĩa thủ tục mới được lưu trữ.
-
Thay đổi quy trình đã lưu trữ
Chạy câu lệnh sau. Thao tác này thêm một cột mới vào kết quả được trả về bởi thủ tục được lưu trữ. Chúng tôi cũng thêm bí danh vào tên cột.
ALTER PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT al.AlbumName, al.ReleaseDate, g.Genre FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON g.GenreId = al.GenreId WHERE ar.ArtistName = @ArtistName; GO
-
Thực hiện quy trình đã lưu trữ
Bây giờ chúng tôi đã thêm
Genre
vào chế độ xem, thủ tục được lưu trữ hiện trả về cột đó khi chúng tôi thực thi nó.EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";