sql >> Database teknologi >  >> RDS >> Sqlserver

2 måder at returnere alle brugerdefinerede funktioner i en SQL Server-database

Denne artikel præsenterer to måder at returnere en liste over brugerdefinerede funktioner i en SQL Server-database.

Mulighed 1 – RUTINER-informationsskemavisningen

Du kan bruge ROUTINES informationsskemavisning for at få en liste over alle brugerdefinerede funktioner i en database.

Denne visning returnerer lagrede procedurer såvel som funktioner, så du skal tilføje en WHERE klausul for at indsnævre det til kun funktioner.

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

Resultat:

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

Returnér funktionens definition

Denne visning har også en ROUTINE_DEFINITION kolonne, så du nemt kan returnere hver funktions definition, hvis det kræves.

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

Mulighed 2 – Sys.objects systemkatalogvisning

En anden måde at returnere en liste over funktioner på er at forespørge sys.objects systemkatalogvisning.

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

Resultat:

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

Her har jeg eksplicit inkluderet alle funktionstyper i WHERE klausul.

Hvis du kører en ad hoc-forespørgsel, men du ikke kan huske alle typerne, kan du gøre noget som dette:

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

Eller denne:

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

Returnér funktionens definition

sys.objects visningen inkluderer ikke en kolonne til objektets definition. Hvis du vil returnere hver funktions definition, kan du tilslutte den med sys.sql_modules systemvisning.

Eksempel:

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. Postgres:vakuumkommando renser ikke døde tupler

  2. Brug XEvent Profiler til at fange forespørgsler i SQL Server

  3. 2 måder at returnere alle brugerdefinerede funktioner i en SQL Server-database

  4. Hvordan RTRIM_ORACLE() virker i MariaDB