Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

2 sposoby na zwrócenie wszystkich funkcji zdefiniowanych przez użytkownika w bazie danych SQL Server

W tym artykule przedstawiono dwa sposoby na zwrócenie listy funkcji zdefiniowanych przez użytkownika w bazie danych SQL Server.

Opcja 1 – Widok schematu informacyjnego ROUTINES

Możesz użyć ROUTINES widok schematu informacji, aby uzyskać listę wszystkich funkcji zdefiniowanych przez użytkownika w bazie danych.

Ten widok zwraca procedury składowane oraz funkcje, więc musisz dodać WHERE klauzulę, aby zawęzić ją do samych funkcji.

USE Music;
SELECT 
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE,
  DATA_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Wynik:

+------------------+-------------------------+----------------+-------------+
| 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       |
+------------------+-------------------------+----------------+-------------+

Zwróć definicję funkcji

Ten widok ma również ROUTINE_DEFINITION kolumny, dzięki czemu w razie potrzeby można łatwo zwrócić definicję każdej funkcji.

SELECT ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Opcja 2 – Widok katalogu systemu sys.objects

Innym sposobem na zwrócenie listy funkcji jest zapytanie o sys.objects widok katalogu systemowego.

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE type IN ('AF','FN','FS','FT','IF','TF');

Wynik:

+----------+-------------------------+----------------------------------+
| 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        |
+----------+-------------------------+----------------------------------+

Tutaj wyraźnie umieściłem wszystkie typy funkcji w WHERE klauzula.

Jeśli uruchamiasz zapytanie ad hoc, ale nie pamiętasz wszystkich typów, możesz zrobić coś takiego:

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION';

Albo to:

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE RIGHT(type_desc, 8) = 'FUNCTION';

Zwróć definicję funkcji

sys.objects widok nie zawiera kolumny dla definicji obiektu. Jeśli chcesz zwrócić definicję każdej funkcji, możesz dołączyć do niej za pomocą sys.sql_modules widok systemu.

Przykład:

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. Datetime T-SQL zaokrąglone do najbliższej minuty i najbliższych godzin przy użyciu funkcji

  2. Napraw komunikat 8116 „Argument typ danych varchar jest nieprawidłowy dla argumentu 1 funkcji session_context” w programie SQL Server

  3. Odpowiednik MySQL ON DUPLICATE KEY UPDATE w Sql Server

  4. Jak wykonać wyzwalacz tylko po zaktualizowaniu określonej kolumny (SQL Server)

  5. Zaplanowane uruchomienie procedury składowanej na serwerze SQL