Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

2 cách trả về tất cả các hàm do người dùng xác định trong cơ sở dữ liệu máy chủ SQL

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');

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sửa kế hoạch tự động trong SQL Server

  2. Làm thế nào để tách chuỗi bằng cách sử dụng ký tự phân tách ký tự bằng T-SQL?

  3. Sử dụng SQL Server làm kho lưu trữ hình ảnh

  4. Cách tạo khóa chính tổng hợp trong SQL Server (Ví dụ T-SQL)

  5. Làm cách nào để tìm các bản sao trên nhiều cột?