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');