sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att lista alla lagrade procedurer i en SQL Server-databas

Den här artikeln presenterar två sätt att returnera en lista över lagrade procedurer i en SQL Server-databas.

Alternativ 1 – Informationsschemavyn för RUTINER

Du kan använda ROUTINES informationsschemavy för att få en lista över alla användardefinierade lagrade procedurer i en databas.

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

Resultat:

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

Återställ procedurens definition

INFORMATION_SCHEMA.ROUTINES vyn har också en ROUTINE_DEFINITION kolumn, så att du enkelt kan returnera varje lagrad procedurs definition om det behövs.

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

Alternativ 2 – Sys.objects systemkatalogvy

Ett annat sätt att returnera en lista över lagrade procedurer är att fråga sys.objects systemkatalogvy.

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

Resultat:

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

Typen P antas för "Procedur".

Ett annat sätt att göra detta är att filtrera efter type_desc kolumn:

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

Återställ procedurens definition

sys.objects vyn innehåller inte en kolumn för objektets definition. Om du vill returnera varje lagrad procedurs definition kan du ansluta den med sys.sql_modules systemvy.

Exempel:

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

Alternativ 3 – Sys.procedures Catalog View

sys.procedures katalog lagrad procedur innehåller en rad för varje objekt som är en procedur av något slag, med sys.objects.type =P, X, RF och PC.

Om du kör följande kod returneras alla lagrade procedurer som användaren antingen äger eller som användaren har fått viss behörighet för.

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

Resultat:

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

Denna vy ärver type kolumn från sys.objects så att du kan filtrera resultaten efter procedurtyp om du vill.

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

I mitt fall får jag samma resultat eftersom båda mina procedurer är av typen "P".

Om du undrar, här är vad varje typ betyder.

P
SQL lagrad procedur
X
Utökad lagrad procedur
RF
Replication-filter-procedur
PC
Sammanställning (CLR) lagrad procedur

Återställ procedurens definition

sys.procedures vyn innehåller inte en kolumn för objektets definition. Som med den föregående metoden, om du vill returnera varje lagrad procedurs definition, kan du ansluta den med sys.sql_modules systemvy.

Exempel:

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

  1. Lösning för ORA-00997:olaglig användning av LONG datatyp

  2. Hur sammanfogar man två tabeller mysql?

  3. SQL CASE-sats

  4. Mekanism Följer av Oracle när vi tar hot backup