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

3 måder at liste alle lagrede procedurer i en SQL Server-database

Denne artikel præsenterer to måder at returnere en liste over lagrede procedurer i en SQL Server-database.

Mulighed 1 – RUTINER-informationsskemavisningen

Du kan bruge ROUTINES informationsskemavisning for at få en liste over alle brugerdefinerede lagrede procedurer i en database.

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

Resultat:

+------------------+----------------------+
| ROUTINE_SCHEMA   | ROUTINE_NAME         |
|------------------+----------------------|
| dbo              | spAlbumsFromArtist   |
| dbo              | uspGetAlbumsByArtist |
+------------------+----------------------+

Returnér procedurens definition

INFORMATION_SCHEMA.ROUTINES visningen har også en ROUTINE_DEFINITION kolonne, så du nemt kan returnere hver lagret procedures definition, hvis det kræves.

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

Mulighed 2 – Sys.objects systemkatalogvisning

En anden måde at returnere en liste over lagrede procedurer på er at forespørge sys.objects systemkatalogvisning.

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name
FROM sys.objects
WHERE type = 'P';

Resultat:

+----------+----------------------+
| Schema   | name                 |
|----------+----------------------|
| dbo      | spAlbumsFromArtist   |
| dbo      | uspGetAlbumsByArtist |
+----------+----------------------+

Typen P er formodentlig for "Procedure".

En anden måde at gøre dette på er at filtrere efter type_desc kolonne:

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

Returnér procedurens definition

sys.objects visningen inkluderer ikke en kolonne til objektets definition. Hvis du vil returnere hver lagret procedures definition, kan du tilslutte den med sys.sql_modules systemvisning.

Eksempel:

SELECT definition
FROM sys.objects o
INNER JOIN sys.sql_modules m 
ON o.object_id = m.object_id
WHERE type = 'P';

Mulighed 3 – Sys.procedures Catalog View

sys.procedures katalog lagret procedure indeholder en række for hvert objekt, der er en procedure af en art, med sys.objects.type =P, X, RF og PC.

Udførelse af følgende kode vil returnere alle lagrede procedurer, som brugeren enten ejer, eller som brugeren har fået en vis tilladelse til.

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  Name
FROM sys.procedures;

Resultat:

+----------+----------------------+
| Schema   | Name                 |
|----------+----------------------|
| dbo      | spAlbumsFromArtist   |
| dbo      | uspGetAlbumsByArtist |
+----------+----------------------+

Denne visning arver type kolonne fra sys.objects så du kan filtrere resultaterne efter proceduretype, hvis du ønsker det.

SELECT 
  SCHEMA_NAME(schema_id),
  name
FROM sys.procedures
WHERE type = 'P';

I mit tilfælde får jeg det samme resultat, fordi begge mine procedurer er af typen "P".

Hvis du undrer dig, er her, hvad hver type betyder.

P
SQL-lagret procedure
X
Udvidet lagret procedure
RF
Replikerings-filter-procedure
PC
Samling (CLR) lagret procedure

Returnér procedurens definition

sys.procedures visningen inkluderer ikke en kolonne til objektets definition. Som med den foregående metode, hvis du ønsker at returnere hver lagret procedures definition, kan du forbinde den med sys.sql_modules systemvisning.

Eksempel:

SELECT definition
FROM sys.procedures p
INNER JOIN sys.sql_modules m 
ON p.object_id = m.object_id;

  1. Indsættelse af flere rækker i mysql

  2. Heroku og Rails:Gem Load Error med Postgres, men det er specificeret i GEMFILE

  3. Hvad er nyt i MariaDB Server 10.5?

  4. Find sekvenshuller i en tabel i Oracle