sql >> Databasteknik >  >> RDS >> Sqlserver

2 sätt att returnera alla användardefinierade funktioner i en SQL Server-databas

Den här artikeln presenterar två sätt att returnera en lista över användardefinierade funktioner i en SQL Server-databas.

Alternativ 1 – Informationsschemavyn för RUTINER

Du kan använda ROUTINES informationsschemavy för att få en lista över alla användardefinierade funktioner i en databas.

Den här vyn returnerar lagrade procedurer såväl som funktioner, så du måste lägga till en WHERE klausul för att begränsa det till bara 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       |
+------------------+-------------------------+----------------+-------------+

Återställ funktionens definition

Den här vyn har också en ROUTINE_DEFINITION kolumn, så att du enkelt kan returnera varje funktions definition om det behövs.

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

Alternativ 2 – Sys.objects systemkatalogvy

Ett annat sätt att returnera en lista med funktioner är att fråga sys.objects systemkatalogvy.

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

Här har jag uttryckligen inkluderat alla funktionstyper i WHERE klausul.

Om du kör en ad hoc-fråga men du inte kommer ihåg alla typerna kan du göra något så här:

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

Eller det här:

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

Återställ funktionens definition

sys.objects vyn innehåller inte en kolumn för objektets definition. Om du vill returnera varje funktions definition kan du ansluta den med sys.sql_modules systemvy.

Exempel:

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. Asynkrona uppgifter med Django och selleri

  2. Hur parallella planer startar – del 5

  3. Bästa sättet att installera hstore på flera scheman i en Postgres-databas?

  4. Microsoft OLE DB Oförordnad! Länge leve ADO!