Artikel ini menyajikan dua cara untuk mengembalikan daftar fungsi yang ditentukan pengguna dalam database SQL Server.
Opsi 1 – Tampilan Skema Informasi RUTIN
Anda dapat menggunakan ROUTINES tampilan skema informasi untuk mendapatkan daftar semua fungsi yang ditentukan pengguna dalam database.
Tampilan ini mengembalikan prosedur tersimpan serta fungsi, jadi Anda harus menambahkan WHERE klausa untuk mempersempitnya menjadi fungsi saja.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Hasil:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Kembalikan Definisi Fungsi
Tampilan ini juga memiliki ROUTINE_DEFINITION kolom, sehingga Anda dapat dengan mudah mengembalikan definisi setiap fungsi jika diperlukan.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Opsi 2 – Tampilan Katalog Sistem sys.objects
Cara lain untuk mengembalikan daftar fungsi adalah dengan menanyakan sys.objects tampilan katalog sistem.
SELECT
SCHEMA_NAME(schema_id) AS [Schema],
name,
type_desc
FROM sys.objects
WHERE type IN ('AF','FN','FS','FT','IF','TF');
Hasil:
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Di sini saya secara eksplisit menyertakan semua jenis fungsi di WHERE ayat.
Jika Anda menjalankan kueri ad hoc tetapi Anda tidak dapat mengingat semua jenisnya, Anda dapat melakukan sesuatu seperti ini:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Atau ini:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Kembalikan Definisi Fungsi
sys.objects tampilan tidak menyertakan kolom untuk definisi objek. Jika Anda ingin mengembalikan definisi setiap fungsi, Anda dapat menggabungkannya dengan sys.sql_modules tampilan sistem.
Contoh:
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');