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;