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;