sql >> Database >  >> RDS >> Sqlserver

Opgeslagen procedures en functies retourneren in een SQL Server-database:ROUTINES (T-SQL-voorbeelden)

In SQL Server kunt u de Transact-SQL ROUTINES systeeminformatieschemaweergave om een ​​lijst met opgeslagen procedures en functies in de huidige database te retourneren.

Meer specifiek geeft het een lijst terug van alle opgeslagen procedures en functies die toegankelijk zijn voor de huidige gebruiker in de huidige database.

U kunt ook ROUTINES . gebruiken gewoon om informatie over een specifieke procedure of functie terug te sturen indien nodig.

Om deze weergave te gebruiken, gebruikt u de volledig gekwalificeerde naam INFORMATION_SCHEMA.ROUTINES .

Voorbeeld 1 – Alle routines retourneren

Hier is een snel voorbeeld dat alle opgeslagen procedures en functies retourneert in de huidige database (waartoe de huidige gebruiker toegang heeft).

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

Resultaat:

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)

Deze resultaten laten me zien dat er twee functies en twee procedures zijn waartoe ik toegang heb in de "Muziek"-database.

De weergave retourneert een behoorlijk groot aantal kolommen, dus in dit voorbeeld heb ik de kolommen teruggebracht tot slechts vier.

Voorbeeld 2 – Zoek een specifieke routine

U kunt desgewenst ook de resultaten beperken tot een bepaalde procedure of functie.

In dit voorbeeld neem ik alle kolommen op. Ik gebruik verticale uitvoer zodat je niet gedwongen wordt horizontaal te scrollen.

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

Resultaat (met verticale uitvoer):

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

U zult merken dat veel van de kolommen null-waarden hebben. In de Microsoft-documentatie voor deze weergave staat dat veel van deze kolommen altijd NULL retourneren . Er staat ook dat sommige ervan zijn gereserveerd voor toekomstig gebruik.

Voorbeeld 3 – Alleen retourprocedures

U kunt een WHERE . gebruiken clausule om de resultaten te filteren naar alleen opgeslagen procedures of alleen functies.

Dit voorbeeld geeft alleen opgeslagen procedures terug.

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

Resultaat:

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

Voorbeeld 4 – Alleen retourfuncties

Dit voorbeeld geeft alleen functies terug.

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

Resultaat:

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

  1. Hoe krijg ik een lijst met MySQL-weergaven?

  2. Query voor array-elementen binnen JSON-type

  3. MySQL-triggers kunnen geen rijen bijwerken in dezelfde tabel waaraan de trigger is toegewezen. Voorgestelde oplossing?

  4. PostgreSQL volgende waarde van de reeksen?