Cet article présente deux façons de renvoyer une liste de fonctions définies par l'utilisateur dans une base de données SQL Server.
Option 1 - La vue du schéma d'informations ROUTINES
Vous pouvez utiliser les ROUTINES
vue schéma d'information pour obtenir une liste de toutes les fonctions définies par l'utilisateur dans une base de données.
Cette vue renvoie les procédures stockées ainsi que les fonctions, vous devrez donc ajouter un WHERE
clause pour la réduire aux seules fonctions.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Résultat :
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Renvoyer la définition de la fonction
Cette vue a également un ROUTINE_DEFINITION
colonne, afin que vous puissiez facilement renvoyer la définition de chaque fonction si nécessaire.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Option 2 - La vue du catalogue système sys.objects
Une autre façon de retourner une liste de fonctions est d'interroger le sys.objects
vue du catalogue système.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type IN ('AF','FN','FS','FT','IF','TF');
Résultat :
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Ici, j'ai explicitement inclus tous les types de fonctions dans le WHERE
clause.
Si vous exécutez une requête ad hoc mais que vous ne vous souvenez pas de tous les types, vous pouvez faire quelque chose comme ceci :
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Ou ceci :
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Renvoyer la définition de la fonction
Les sys.objects
La vue n'inclut pas de colonne pour la définition de l'objet. Si vous souhaitez renvoyer la définition de chaque fonction, vous pouvez la joindre avec le sys.sql_modules
vue système.
Exemple :
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');