Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

2 начина за връщане на всички дефинирани от потребителя функции в база данни на SQL Server

Тази статия представя два начина за връщане на списък с дефинирани от потребителя функции в база данни на SQL Server.

Опция 1 – Изгледът на информационната схема на ROUTINES

Можете да използвате ROUTINES изглед на информационна схема, за да получите списък с всички дефинирани от потребителя функции в база данни.

Този изглед връща съхранени процедури, както и функции, така че ще трябва да добавите WHERE клауза, за да я стесните само до функции.

USE Music;
SELECT 
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE,
  DATA_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Резултат:

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

Върнете дефиницията на функцията

Този изглед също има ROUTINE_DEFINITION колона, така че можете лесно да върнете дефиницията на всяка функция, ако е необходимо.

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

Опция 2 – Изгледът на системния каталог sys.objects

Друг начин за връщане на списък с функции е да направите заявка за sys.objects изглед на системния каталог.

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE type IN ('AF','FN','FS','FT','IF','TF');
>

Резултат:

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

Тук изрично включих всички типове функции в WHERE клауза.

Ако изпълнявате ad hoc заявка, но не можете да запомните всички типове, можете да направите нещо подобно:

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

Или това:

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

Върнете дефиницията на функцията

sys.objects изгледът не включва колона за дефиницията на обекта. Ако искате да върнете дефиницията на всяка функция, можете да я присъедините с sys.sql_modules системен изглед.

Пример:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възникна грешка, свързана с мрежата или специфична за екземпляр, при установяване на връзка със SQL Server

  2. Какво представляват ограниченията на базата данни?

  3. Разделяне на низа в sql сървър

  4. Върнете всички файлови групи за текущата база данни в SQL Server

  5. Вътрешно свързване на три маси