sql >> データベース >  >> RDS >> Sqlserver

SQLServerデータベースにすべてのストアドプロシージャを一覧表示する3つの方法

    この記事では、SQLServerデータベースのストアドプロシージャのリストを返す2つの方法を紹介します。

    オプション1-ルーチン情報スキーマビュー

    ROUTINESを使用できます データベース内のすべてのユーザー定義ストアドプロシージャのリストを取得するための情報スキーマビュー。

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

    結果:

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

    プロシージャの定義を返す

    INFORMATION_SCHEMA.ROUTINES ビューにはROUTINE_DEFINITIONもあります 列なので、必要に応じて各ストアドプロシージャの定義を簡単に返すことができます。

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

    オプション2–sys.objectsシステムカタログビュー

    ストアドプロシージャのリストを返す別の方法は、sys.objectsにクエリを実行することです。 システムカタログビュー。

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

    結果:

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

    タイプP 「手順」と推定されます。

    これを行う別の方法は、type_descでフィルタリングすることです。 列:

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

    プロシージャの定義を返す

    sys.objects ビューには、オブジェクトの定義の列は含まれていません。各ストアドプロシージャの定義を返す場合は、sys.sql_modulesと結合できます。 システムビュー。

    例:

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

    オプション3–sys.proceduresカタログビュー

    sys.procedures カタログストアドプロシージャには、 sys.objects.type を使用して、ある種のプロシージャである各オブジェクトの行が含まれています。 =P、X、RF、およびPC。

    次のコードを実行すると、ユーザーが所有しているか、ユーザーに何らかの権限が付与されているすべてのストアドプロシージャが返されます。

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

    結果:

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

    このビューはtypeを継承します sys.objectsの列 したがって、必要に応じて、プロシージャタイプで結果をフィルタリングできます。

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

    私の場合、両方の手順が「P」タイプであるため、同じ結果が得られます。

    ご参考までに、各タイプの意味は次のとおりです。

    P
    SQLストアドプロシージャ
    X
    拡張ストアドプロシージャ
    RF
    レプリケーション-フィルター-手順
    PC
    アセンブリ(CLR)ストアドプロシージャ

    プロシージャの定義を返す

    sys.procedures ビューには、オブジェクトの定義の列は含まれていません。前のメソッドと同様に、各ストアドプロシージャの定義を返す場合は、sys.sql_modulesと結合できます。 システムビュー。

    例:

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

    1. OracleのCONNECTBY... START WITHと同等のPostgreSQL構文は何ですか?

    2. phpMyAdminで外部キーを設定しますか?

    3. IllegalStateException:データベースはすでに閉じられています(ViewPagerを使用)

    4. SQLServerで整数を10進数に変換する方法