Bài viết này trình bày hai cách để trả về danh sách các thủ tục được lưu trữ trong cơ sở dữ liệu SQL Server.
Tùy chọn 1 - Chế độ xem giản đồ thông tin ROUTINES
Bạn có thể sử dụng ROUTINES
chế độ xem lược đồ thông tin để nhận danh sách tất cả các thủ tục được lưu trữ do người dùng xác định trong cơ sở dữ liệu.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Kết quả:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Trả lại Định nghĩa của Thủ tục
INFORMATION_SCHEMA.ROUTINES
chế độ xem cũng có ROUTINE_DEFINITION
, vì vậy bạn có thể dễ dàng trả lại từng định nghĩa của thủ tục được lưu trữ nếu cần.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Tùy chọn 2 - Chế độ xem danh mục hệ thống sys.objects
Một cách khác để trả về danh sách các thủ tục đã lưu trữ là truy vấn sys.objects
chế độ xem danh mục hệ thống.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Kết quả:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Loại P
là có thể cho "Thủ tục".
Một cách khác để làm điều này là lọc theo type_desc
cột:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Trả lại Định nghĩa của Thủ tục
sys.objects
chế độ xem không bao gồm một cột cho định nghĩa của đối tượng. Nếu bạn muốn trả lại định nghĩa của từng thủ tục đã lưu trữ, bạn có thể kết hợp nó với sys.sql_modules
chế độ xem hệ thống.
Ví dụ:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Tùy chọn 3 - Chế độ xem danh mục sys.procedures
sys.procedures
thủ tục được lưu trữ trong danh mục chứa một hàng cho mỗi đối tượng là một thủ tục thuộc một số loại, với sys.objects.type =P, X, RF và PC.
Việc thực thi đoạn mã sau sẽ trả về tất cả các thủ tục được lưu trữ mà người dùng sở hữu hoặc người dùng đã được cấp một số quyền.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Kết quả:
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Chế độ xem này kế thừa kiểu type
cột từ sys.objects
vì vậy bạn có thể lọc kết quả theo loại thủ tục nếu bạn muốn.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
Trong trường hợp của tôi, tôi nhận được cùng một kết quả vì cả hai quy trình của tôi đều thuộc loại “P”.
Trong trường hợp bạn đang thắc mắc, đây là ý nghĩa của từng loại.
- P
- Thủ tục lưu trữ SQL
- X
- Thủ tục được lưu trữ mở rộng
- RF
- Replication-filter-procedure
- PC
- Thủ tục lưu trữ Assembly (CLR)
Trả lại Định nghĩa của Thủ tục
sys.procedures
chế độ xem không bao gồm một cột cho định nghĩa của đối tượng. Như với phương pháp trước, nếu bạn muốn trả lại định nghĩa của từng thủ tục được lưu trữ, bạn có thể kết hợp nó với sys.sql_modules
chế độ xem hệ thống.
Ví dụ:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;