Questo articolo presenta due modi per restituire un elenco di funzioni definite dall'utente in un database di SQL Server.
Opzione 1 – Visualizzazione dello schema delle informazioni ROUTINE
Puoi usare le ROUTINES vista schema di informazioni per ottenere un elenco di tutte le funzioni definite dall'utente in un database.
Questa vista restituisce stored procedure e funzioni, quindi dovrai aggiungere un WHERE clausola per restringerla alle sole funzioni.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Risultato:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Restituisci la definizione della funzione
Questa vista ha anche un ROUTINE_DEFINITION colonna, in modo da poter restituire facilmente la definizione di ciascuna funzione, se necessario.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Opzione 2 – La vista del catalogo di sistema sys.objects
Un altro modo per restituire un elenco di funzioni è interrogare sys.objects vista catalogo di sistema.
SELECT
SCHEMA_NAME(schema_id) AS [Schema],
name,
type_desc
FROM sys.objects
WHERE type IN ('AF','FN','FS','FT','IF','TF');
Risultato:
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Qui ho incluso esplicitamente tutti i tipi di funzione in WHERE clausola.
Se stai eseguendo una query ad hoc ma non ricordi tutti i tipi, puoi fare qualcosa del genere:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
O questo:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Restituisci la definizione della funzione
Il sys.objects view non include una colonna per la definizione dell'oggetto. Se vuoi restituire la definizione di ciascuna funzione, puoi unirla con sys.sql_modules vista di sistema.
Esempio:
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');