sql >> Database >  >> RDS >> Sqlserver

2 manieren om alle door de gebruiker gedefinieerde functies in een SQL Server-database te retourneren

In dit artikel worden twee manieren gepresenteerd om een ​​lijst met door de gebruiker gedefinieerde functies in een SQL Server-database te retourneren.

Optie 1 – De ROUTINES-informatieschemaweergave

U kunt de ROUTINES . gebruiken informatieschemaweergave om een ​​lijst te krijgen van alle door de gebruiker gedefinieerde functies in een database.

Deze weergave retourneert zowel opgeslagen procedures als functies, dus u moet een WHERE . toevoegen clausule om het te beperken tot alleen functies.

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

Resultaat:

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

Retourneer de definitie van de functie

Deze weergave heeft ook een ROUTINE_DEFINITION kolom, zodat u indien nodig gemakkelijk de definitie van elke functie kunt retourneren.

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

Optie 2 – De systeemcatalogusweergave sys.objects

Een andere manier om een ​​lijst met functies te retourneren, is door de sys.objects . op te vragen systeemcatalogusweergave.

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

Resultaat:

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

Hier heb ik expliciet alle functietypes opgenomen in de WHERE clausule.

Als u een ad-hocquery uitvoert, maar u kunt niet alle typen onthouden, kunt u zoiets als dit doen:

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

Of dit:

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

Retourneer de definitie van de functie

De sys.objects weergave bevat geen kolom voor de definitie van het object. Als u de definitie van elke functie wilt retourneren, kunt u deze samenvoegen met de sys.sql_modules systeemweergave.

Voorbeeld:

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. Kan niet inloggen op database als SYS met Oracle SQL Developer

  2. Hoe een json-array in rijen in postgres te veranderen

  3. Hoe waarden dynamisch doorgeven aan de IN-operator?

  4. Een serverloze GraphQL-API maken voor MySQL, Postgres en Aurora