sql >> Database >  >> RDS >> Sqlserver

3 manieren om alle opgeslagen procedures in een SQL Server-database op te sommen

In dit artikel worden twee manieren beschreven om een ​​lijst met opgeslagen procedures in een SQL Server-database te retourneren.

Optie 1 – De ROUTINES-informatieschemaweergave

U kunt de ROUTINES . gebruiken informatieschema om een ​​lijst te krijgen van alle door de gebruiker gedefinieerde opgeslagen procedures in een database.

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

Resultaat:

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

Retourneer de definitie van de procedure

De INFORMATION_SCHEMA.ROUTINES weergave heeft ook een ROUTINE_DEFINITION kolom, zodat u indien nodig gemakkelijk de definitie van elke opgeslagen procedure kunt retourneren.

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

Optie 2 – De systeemcatalogusweergave sys.objects

Een andere manier om een ​​lijst met opgeslagen procedures te retourneren, is door de sys.objects . op te vragen systeemcatalogusweergave.

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

Resultaat:

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

Het type P is vermoedelijk voor “Procedure”.

Een andere manier om dit te doen is filteren op de type_desc kolom:

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

Retourneer de definitie van de procedure

De sys.objects weergave bevat geen kolom voor de definitie van het object. Als u de definitie van elke opgeslagen procedure wilt retourneren, kunt u deze samenvoegen met de sys.sql_modules systeemweergave.

Voorbeeld:

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

Optie 3 – De sys.procedures-catalogusweergave

De sys.procedures catalogus opgeslagen procedure bevat een rij voor elk object dat een of andere procedure is, met sys.objects.type =P, X, RF en pc.

Als u de volgende code uitvoert, worden alle opgeslagen procedures geretourneerd die de gebruiker bezit of waarvoor de gebruiker toestemming heeft gekregen.

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

Resultaat:

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

Deze weergave erft het type kolom van sys.objects zodat u desgewenst de resultaten kunt filteren op proceduretype.

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

In mijn geval krijg ik hetzelfde resultaat omdat mijn beide procedures van het type "P" zijn.

Voor het geval je je afvraagt, hier is wat elk type betekent.

P
SQL-opgeslagen procedure
X
Uitgebreide opgeslagen procedure
RF
Replicatie-filter-procedure
PC
Assemblage (CLR) opgeslagen procedure

Retourneer de definitie van de procedure

De sys.procedures weergave bevat geen kolom voor de definitie van het object. Net als bij de vorige methode, als u de definitie van elke opgeslagen procedure wilt retourneren, kunt u deze samenvoegen met de sys.sql_modules systeemweergave.

Voorbeeld:

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

  1. FOUT:Kan rij 0, col -1 van CursorWindow niet lezen. Zorg ervoor dat de cursor correct is geïnitialiseerd voordat u toegang krijgt tot gegevens

  2. Conversie mislukt bij het converteren van datum en/of tijd van tekenreeks tijdens het invoegen van datetime

  3. Een MySQL-database converteren naar UTF-8-codering

  4. MYSQLi-fout:gebruiker heeft al meer dan 'max_user_connections' actieve verbindingen