Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwracanie procedur i funkcji składowanych w bazie danych programu SQL Server:PROCEDURY (przykłady T-SQL)

W SQL Server możesz użyć Transact-SQL ROUTINES widok schematu informacji o systemie, aby zwrócić listę procedur i funkcji składowanych w bieżącej bazie danych.

Dokładniej, zwraca listę wszystkich procedur składowanych i funkcji, do których bieżący użytkownik może uzyskać dostęp w bieżącej bazie danych.

Możesz także użyć ROUTINES po prostu zwrócić informacje o określonej procedurze lub funkcji, jeśli jest to wymagane.

Aby użyć tego widoku, użyj w pełni kwalifikowanej nazwy INFORMATION_SCHEMA.ROUTINES .

Przykład 1 – Zwróć wszystkie procedury

Oto krótki przykład, który zwraca wszystkie procedury składowane i funkcje w bieżącej bazie danych (do których bieżący użytkownik ma dostęp).

USE Music;
SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES;

Wynik:

Changed database context to 'Music'.
+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | ISOweek              | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre    | FUNCTION       |
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(4 rows affected)

Wyniki te pokazują mi, że w bazie danych „Muzyka” mam dostęp do dwóch funkcji i dwóch procedur.

Widok zwraca dość dużą liczbę kolumn, więc w tym przykładzie zawęziłem kolumny do zaledwie czterech.

Przykład 2 – Znajdź konkretną procedurę

Możesz również zawęzić wyniki do określonej procedury lub funkcji, jeśli wolisz.

W tym przykładzie uwzględniam wszystkie kolumny. Używam wyjścia pionowego, aby nie trzeba było przewijać w poziomie.

SELECT * 
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';

Wynik (przy użyciu wyjścia pionowego):

-[ RECORD 1 ]-------------------------
SPECIFIC_CATALOG         | Music
SPECIFIC_SCHEMA          | dbo
SPECIFIC_NAME            | uspGetAlbumsByArtist
ROUTINE_CATALOG          | Music
ROUTINE_SCHEMA           | dbo
ROUTINE_NAME             | uspGetAlbumsByArtist
ROUTINE_TYPE             | PROCEDURE
MODULE_CATALOG           | NULL
MODULE_SCHEMA            | NULL
MODULE_NAME              | NULL
UDT_CATALOG              | NULL
UDT_SCHEMA               | NULL
UDT_NAME                 | NULL
DATA_TYPE                | NULL
CHARACTER_MAXIMUM_LENGTH | NULL
CHARACTER_OCTET_LENGTH   | NULL
COLLATION_CATALOG        | NULL
COLLATION_SCHEMA         | NULL
COLLATION_NAME           | NULL
CHARACTER_SET_CATALOG    | NULL
CHARACTER_SET_SCHEMA     | NULL
CHARACTER_SET_NAME       | NULL
NUMERIC_PRECISION        | NULL
NUMERIC_PRECISION_RADIX  | NULL
NUMERIC_SCALE            | NULL
DATETIME_PRECISION       | NULL
INTERVAL_TYPE            | NULL
INTERVAL_PRECISION       | NULL
TYPE_UDT_CATALOG         | NULL
TYPE_UDT_SCHEMA          | NULL
TYPE_UDT_NAME            | NULL
SCOPE_CATALOG            | NULL
SCOPE_SCHEMA             | NULL
SCOPE_NAME               | NULL
MAXIMUM_CARDINALITY      | NULL
DTD_IDENTIFIER           | NULL
ROUTINE_BODY             | SQL
ROUTINE_DEFINITION       | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
SELECT AlbumName
FROM [fdec67e6a28d].[Music].[dbo].[Albums]
WHERE ArtistId = @ArtistId
EXTERNAL_NAME            | NULL
EXTERNAL_LANGUAGE        | NULL
PARAMETER_STYLE          | NULL
IS_DETERMINISTIC         | NO
SQL_DATA_ACCESS          | MODIFIES
IS_NULL_CALL             | NULL
SQL_PATH                 | NULL
SCHEMA_LEVEL_ROUTINE     | YES
MAX_DYNAMIC_RESULT_SETS  | -1
IS_USER_DEFINED_CAST     | NO
IS_IMPLICITLY_INVOCABLE  | NO
CREATED                  | 2019-10-26 01:11:30.677
LAST_ALTERED             | 2019-10-26 03:50:42.527
(1 row affected)

Zauważysz, że wiele kolumn ma wartości null. Dokumentacja Microsoft dla tego widoku stwierdza, że ​​wiele z tych kolumn zawsze zwraca NULL . Stwierdza również, że niektóre z nich są zarezerwowane do wykorzystania w przyszłości.

Przykład 3 – Tylko procedury zwrotu

Możesz użyć WHERE klauzula, aby filtrować wyniki tylko do procedur składowanych lub tylko funkcji.

Ten przykład zwraca tylko procedury składowane.

SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Wynik:

+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(2 rows affected)

Przykład 4 – Tylko funkcje powrotu

Ten przykład zwraca tylko funkcje.

SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Wynik:

+-------------------+------------------+-------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME      | ROUTINE_TYPE   |
|-------------------+------------------+-------------------+----------------|
| Music             | dbo              | ISOweek           | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre | FUNCTION       |
+-------------------+------------------+-------------------+----------------+
(2 rows affected)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zrozumieć typ danych geograficznych serwera SQL?

  2. Kod do walidacji skryptów SQL

  3. Podłączanie serwera Bastion do serwera PostgreSQL przez tunel SSH

  4. Brak wsparcia dla OVER w MS SQL Server 2005?

  5. Dlaczego warto korzystać z Select Top 100 procent?