sql >> Databáze >  >> RDS >> Sqlserver

2 způsoby, jak vrátit všechny uživatelem definované funkce v databázi SQL Server

Tento článek představuje dva způsoby, jak vrátit seznam uživatelem definovaných funkcí v databázi SQL Server.

Možnost 1 – Zobrazení informačního schématu ROUTINES

Můžete použít ROUTINES zobrazení informačního schématu pro získání seznamu všech uživatelsky definovaných funkcí v databázi.

Toto zobrazení vrací uložené procedury i funkce, takže budete muset přidat WHERE klauzule k zúžení pouze na funkce.

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

Výsledek:

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

Vrátí definici funkce

Toto zobrazení má také ROUTINE_DEFINITION sloupec, takže v případě potřeby můžete snadno vrátit definici každé funkce.

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

Možnost 2 – Zobrazení systémového katalogu sys.objects

Dalším způsobem, jak vrátit seznam funkcí, je dotaz na sys.objects zobrazení systémového katalogu.

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

Výsledek:

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

Zde jsem výslovně zahrnul všechny typy funkcí do WHERE doložka.

Pokud spouštíte dotaz ad hoc, ale nepamatujete si všechny typy, můžete udělat něco takového:

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

Nebo toto:

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

Vrátí definici funkce

Soubor sys.objects zobrazení neobsahuje sloupec pro definici objektu. Pokud chcete vrátit definici každé funkce, můžete ji připojit pomocí sys.sql_modules systémový pohled.

Příklad:

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. Jak UTC_DATE() funguje v MariaDB

  2. Klauzule SQL GROUP BY pro začátečníky

  3. Vygenerujte SQL pro aktualizaci primárního klíče

  4. Jak funguje operátor LIKE v MariaDB