Bài viết này trình bày hai cách để trả về danh sách các hàm do người dùng xác định 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 giản đồ thông tin để nhận danh sách tất cả các chức năng do người dùng xác định trong cơ sở dữ liệu.
Dạng xem này trả về các thủ tục cũng như các hàm đã lưu trữ, vì vậy bạn sẽ cần thêm WHERE
mệnh đề để thu hẹp nó xuống chỉ các chức năng.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Kết quả:
+------------------+-------------------------+----------------+-------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | DATA_TYPE | |------------------+-------------------------+----------------+-------------| | dbo | ISOweek | FUNCTION | int | | dbo | ufn_AlbumsByGenre | FUNCTION | TABLE | | dbo | ufn_AlbumsByArtist | FUNCTION | TABLE | | dbo | ufn_AlbumsByGenre_MSTVF | FUNCTION | TABLE | +------------------+-------------------------+----------------+-------------+
Trả về Định nghĩa của Hàm
Chế độ xem này cũng có ROUTINE_DEFINITION
, vì vậy bạn có thể dễ dàng trả về định nghĩa của từng hàm nếu cần.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
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 hàm là truy vấn sys.objects
chế độ xem danh mục hệ thống.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type IN ('AF','FN','FS','FT','IF','TF');
Kết quả:
+----------+-------------------------+----------------------------------+ | Schema | name | type_desc | |----------+-------------------------+----------------------------------| | dbo | ISOweek | SQL_SCALAR_FUNCTION | | dbo | ufn_AlbumsByGenre | SQL_INLINE_TABLE_VALUED_FUNCTION | | dbo | ufn_AlbumsByArtist | SQL_INLINE_TABLE_VALUED_FUNCTION | | dbo | ufn_AlbumsByGenre_MSTVF | SQL_TABLE_VALUED_FUNCTION | +----------+-------------------------+----------------------------------+
Ở đây, tôi đã bao gồm rõ ràng tất cả các loại hàm trong WHERE
mệnh đề.
Nếu bạn đang chạy một truy vấn đặc biệt nhưng bạn không thể nhớ tất cả các loại, bạn có thể làm như sau:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Hoặc cái này:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Trả về Định nghĩa của Hàm
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 hàm, 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 IN ('AF','FN','FS','FT','IF','TF');