Trong SQL Server, bạn có thể sử dụng ROUTINES
của Transact-SQL chế độ xem giản đồ thông tin hệ thống để trả về danh sách các thủ tục và chức năng được lưu trữ trong cơ sở dữ liệu hiện tại.
Cụ thể hơn, nó trả về danh sách tất cả các thủ tục và chức năng được lưu trữ mà người dùng hiện tại có thể truy cập trong cơ sở dữ liệu hiện tại.
Bạn cũng có thể sử dụng ROUTINES
chỉ để trả lại thông tin về một thủ tục hoặc chức năng cụ thể nếu được yêu cầu.
Để sử dụng chế độ xem này, hãy sử dụng tên đủ điều kiện của INFORMATION_SCHEMA.ROUTINES
.
Ví dụ 1 - Trả lại tất cả các quy trình
Dưới đây là một ví dụ nhanh trả về tất cả các thủ tục và chức năng được lưu trữ trong cơ sở dữ liệu hiện tại (mà người dùng hiện tại có quyền truy cập).
USE Music; SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES;
Kết quả:
Changed database context to 'Music'. +-------------------+------------------+----------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+----------------------+----------------| | Music | dbo | ISOweek | FUNCTION | | Music | dbo | ufn_AlbumsByGenre | FUNCTION | | Music | dbo | spAlbumsFromArtist | PROCEDURE | | Music | dbo | uspGetAlbumsByArtist | PROCEDURE | +-------------------+------------------+----------------------+----------------+ (4 rows affected)
Những kết quả này cho tôi thấy rằng có hai hàm và hai thủ tục mà tôi có quyền truy cập trong cơ sở dữ liệu “Âm nhạc”.
Chế độ xem trả về một số lượng cột khá lớn, vì vậy trong ví dụ này, tôi đã thu hẹp các cột xuống chỉ còn bốn.
Ví dụ 2 - Tìm một quy trình cụ thể
Bạn cũng có thể thu hẹp kết quả thành một quy trình hoặc chức năng nhất định nếu bạn muốn.
Trong ví dụ này, tôi bao gồm tất cả các cột. Tôi sử dụng đầu ra theo chiều dọc để bạn không bị buộc phải cuộn theo chiều ngang.
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
Kết quả (sử dụng đầu ra dọc):
-[ RECORD 1 ]------------------------- SPECIFIC_CATALOG | Music SPECIFIC_SCHEMA | dbo SPECIFIC_NAME | uspGetAlbumsByArtist ROUTINE_CATALOG | Music ROUTINE_SCHEMA | dbo ROUTINE_NAME | uspGetAlbumsByArtist ROUTINE_TYPE | PROCEDURE MODULE_CATALOG | NULL MODULE_SCHEMA | NULL MODULE_NAME | NULL UDT_CATALOG | NULL UDT_SCHEMA | NULL UDT_NAME | NULL DATA_TYPE | NULL CHARACTER_MAXIMUM_LENGTH | NULL CHARACTER_OCTET_LENGTH | NULL COLLATION_CATALOG | NULL COLLATION_SCHEMA | NULL COLLATION_NAME | NULL CHARACTER_SET_CATALOG | NULL CHARACTER_SET_SCHEMA | NULL CHARACTER_SET_NAME | NULL NUMERIC_PRECISION | NULL NUMERIC_PRECISION_RADIX | NULL NUMERIC_SCALE | NULL DATETIME_PRECISION | NULL INTERVAL_TYPE | NULL INTERVAL_PRECISION | NULL TYPE_UDT_CATALOG | NULL TYPE_UDT_SCHEMA | NULL TYPE_UDT_NAME | NULL SCOPE_CATALOG | NULL SCOPE_SCHEMA | NULL SCOPE_NAME | NULL MAXIMUM_CARDINALITY | NULL DTD_IDENTIFIER | NULL ROUTINE_BODY | SQL ROUTINE_DEFINITION | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [fdec67e6a28d].[Music].[dbo].[Albums] WHERE ArtistId = @ArtistId EXTERNAL_NAME | NULL EXTERNAL_LANGUAGE | NULL PARAMETER_STYLE | NULL IS_DETERMINISTIC | NO SQL_DATA_ACCESS | MODIFIES IS_NULL_CALL | NULL SQL_PATH | NULL SCHEMA_LEVEL_ROUTINE | YES MAX_DYNAMIC_RESULT_SETS | -1 IS_USER_DEFINED_CAST | NO IS_IMPLICITLY_INVOCABLE | NO CREATED | 2019-10-26 01:11:30.677 LAST_ALTERED | 2019-10-26 03:50:42.527 (1 row affected)
Bạn sẽ nhận thấy rằng nhiều cột có giá trị rỗng. Tài liệu của Microsoft cho dạng xem này nói rằng nhiều cột trong số này luôn trả về NULL
. Nó cũng nói rằng một số trong số chúng được dành để sử dụng trong tương lai.
Ví dụ 3 - Chỉ Thủ tục Trả hàng
Bạn có thể sử dụng WHERE
mệnh đề để lọc kết quả thành chỉ các thủ tục được lưu trữ hoặc chỉ các hàm.
Ví dụ này chỉ trả về các thủ tục được lưu trữ.
SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Kết quả:
+-------------------+------------------+----------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+----------------------+----------------| | Music | dbo | spAlbumsFromArtist | PROCEDURE | | Music | dbo | uspGetAlbumsByArtist | PROCEDURE | +-------------------+------------------+----------------------+----------------+ (2 rows affected)
Ví dụ 4 - Chỉ các hàm trả về
Ví dụ này chỉ trả về các hàm.
SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Kết quả:
+-------------------+------------------+-------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+-------------------+----------------| | Music | dbo | ISOweek | FUNCTION | | Music | dbo | ufn_AlbumsByGenre | FUNCTION | +-------------------+------------------+-------------------+----------------+ (2 rows affected)