sql >> Database teknologi >  >> RDS >> Sqlserver

Returner lagrede procedurer og funktioner i en SQL Server-database:RUTINER (T-SQL-eksempler)

I SQL Server kan du bruge Transact-SQL ROUTINES systeminformationsskemavisning for at returnere en liste over lagrede procedurer og funktioner i den aktuelle database.

Mere specifikt returnerer den en liste over alle lagrede procedurer og funktioner, som den aktuelle bruger kan få adgang til i den aktuelle database.

Du kan også bruge ROUTINES blot for at returnere oplysninger om en specifik procedure eller funktion, hvis det kræves.

For at bruge denne visning skal du bruge det fuldt kvalificerede navn INFORMATION_SCHEMA.ROUTINES .

Eksempel 1 – Returner alle rutiner

Her er et hurtigt eksempel, der returnerer alle lagrede procedurer og funktioner i den aktuelle database (som den aktuelle bruger har adgang til).

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

Resultat:

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)

Disse resultater viser mig, at der er to funktioner og to procedurer, som jeg har adgang til i "Musik"-databasen.

Visningen returnerer et ret stort antal kolonner, så i dette eksempel har jeg indsnævret kolonnerne til kun fire.

Eksempel 2 – Find en specifik rutine

Du kan også indsnævre resultaterne til en given procedure eller funktion, hvis du foretrækker det.

I dette eksempel inkluderer jeg alle kolonner. Jeg bruger lodret output, så du ikke er tvunget til at rulle vandret.

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

Resultat (ved hjælp af lodret output):

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

Du vil bemærke, at mange af kolonnerne har nulværdier. Microsofts dokumentation for denne visning angiver, at mange af disse kolonner altid returnerer NULL . Det står også, at nogle af dem er reserveret til fremtidig brug.

Eksempel 3 – Kun returprocedurer

Du kan bruge en WHERE klausul for at filtrere resultaterne til kun lagrede procedurer eller bare funktioner.

Dette eksempel returnerer kun lagrede procedurer.

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

Resultat:

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

Eksempel 4 – Kun returfunktioner

Dette eksempel returnerer kun funktioner.

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

Resultat:

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

  1. Hvordan bestilles efter to kolonner i SQL?

  2. MySQL Workbench:Fejl i forespørgsel (1064):Syntaksfejl nær 'VISIBLE' på linje 1

  3. Forbinder Visual COBOL til MySQL

  4. Sikkerhedskopier/gendan SQLlite-database til Google Drev-appmappe