sql >> Databáze >  >> RDS >> Sqlserver

Vrácení uložených procedur a funkcí v databázi SQL Server:ROUTINES (příklady T-SQL)

Na serveru SQL Server můžete použít ROUTINES Transact-SQL zobrazení schématu systémových informací pro návrat seznamu uložených procedur a funkcí v aktuální databázi.

Přesněji řečeno, vrací seznam všech uložených procedur a funkcí, ke kterým má aktuální uživatel v aktuální databázi přístup.

Můžete také použít ROUTINES v případě potřeby jednoduše vrátit informace o konkrétní proceduře nebo funkci.

Chcete-li použít toto zobrazení, použijte plně kvalifikovaný název INFORMATION_SCHEMA.ROUTINES .

Příklad 1 – Vrátit všechny rutiny

Zde je rychlý příklad, který vrátí všechny uložené procedury a funkce v aktuální databázi (ke které má aktuální uživatel přístup).

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

Výsledek:

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)

Tyto výsledky mi ukazují, že v databázi „Music“ mám přístup ke dvěma funkcím a dvěma procedurám.

Zobrazení vrací poměrně velký počet sloupců, takže v tomto příkladu jsem zúžil sloupce na pouhé čtyři.

Příklad 2 – Najděte konkrétní rutinu

Pokud chcete, můžete také zúžit výsledky na daný postup nebo funkci.

V tomto příkladu zahrnu všechny sloupce. Používám vertikální výstup, abyste nebyli nuceni posouvat horizontálně.

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

Výsledek (při použití vertikálního výstupu):

-[ 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)

Všimnete si, že mnoho sloupců má hodnoty null. V dokumentaci společnosti Microsoft pro toto zobrazení je uvedeno, že mnoho z těchto sloupců vždy vrací hodnotu NULL . Rovněž uvádí, že některé z nich jsou vyhrazeny pro budoucí použití.

Příklad 3 – Pouze postupy vrácení

Můžete použít WHERE klauzule k filtrování výsledků pouze na uložené procedury nebo pouze funkce.

Tento příklad vrací pouze uložené procedury.

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

Výsledek:

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

Příklad 4 – Pouze funkce návratu

Tento příklad vrací pouze funkce.

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

Výsledek:

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

  1. Jak rozdělím řetězec, abych měl přístup k položce x?

  2. Převezměte kontrolu nad svými daty pomocí Microsoft Access

  3. Jak monitorovat kontejnery MySQL pomocí Prometheus – nasazení na Standalone a Swarm::Část první

  4. Islands T-SQL Challenge