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

SQL Serverデータベースにストアドプロシージャと関数を返す:ルーチン(T-SQLの例)

    SQL Serverでは、Transact-SQL ROUTINESを使用できます。 現在のデータベース内のストアドプロシージャと関数のリストを返すシステム情報スキーマビュー。

    具体的には、現在のデータベース内の現在のユーザーがアクセスできるすべてのストアドプロシージャと関数のリストを返します。

    ROUTINESを使用することもできます 必要に応じて、特定の手順または機能に関する情報を返すだけです。

    このビューを使用するには、INFORMATION_SCHEMA.ROUTINESの完全修飾名を使用します 。

    例1-すべてのルーチンを返す

    これは、現在のデータベース(現在のユーザーがアクセスできる)のすべてのストアドプロシージャと関数を返す簡単な例です。

    USE Music;
    SELECT 
      ROUTINE_CATALOG,
      ROUTINE_SCHEMA,
      ROUTINE_NAME,
      ROUTINE_TYPE
    FROM INFORMATION_SCHEMA.ROUTINES;
    

    結果:

    Changed database context to 'Music'.
    +-------------------+------------------+----------------------+----------------+
    | ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
    |-------------------+------------------+----------------------+----------------|
    | Music             | dbo              | ISOweek              | FUNCTION       |
    | Music             | dbo              | ufn_AlbumsByGenre    | FUNCTION       |
    | Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
    | Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
    +-------------------+------------------+----------------------+----------------+
    (4 rows affected)
    

    これらの結果は、「音楽」データベースにアクセスできる2つの関数と2つのプロシージャがあることを示しています。

    ビューは非常に多くの列を返すため、この例では列を4つに絞り込みました。

    例2–特定のルーチンを見つける

    必要に応じて、結果を特定の手順または関数に絞り込むこともできます。

    この例では、すべての列を含めます。水平方向にスクロールする必要がないように、垂直出力を使用しています。

    SELECT * 
    FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
    

    結果(垂直出力を使用):

    -[ RECORD 1 ]-------------------------
    SPECIFIC_CATALOG         | Music
    SPECIFIC_SCHEMA          | dbo
    SPECIFIC_NAME            | uspGetAlbumsByArtist
    ROUTINE_CATALOG          | Music
    ROUTINE_SCHEMA           | dbo
    ROUTINE_NAME             | uspGetAlbumsByArtist
    ROUTINE_TYPE             | PROCEDURE
    MODULE_CATALOG           | NULL
    MODULE_SCHEMA            | NULL
    MODULE_NAME              | NULL
    UDT_CATALOG              | NULL
    UDT_SCHEMA               | NULL
    UDT_NAME                 | NULL
    DATA_TYPE                | NULL
    CHARACTER_MAXIMUM_LENGTH | NULL
    CHARACTER_OCTET_LENGTH   | NULL
    COLLATION_CATALOG        | NULL
    COLLATION_SCHEMA         | NULL
    COLLATION_NAME           | NULL
    CHARACTER_SET_CATALOG    | NULL
    CHARACTER_SET_SCHEMA     | NULL
    CHARACTER_SET_NAME       | NULL
    NUMERIC_PRECISION        | NULL
    NUMERIC_PRECISION_RADIX  | NULL
    NUMERIC_SCALE            | NULL
    DATETIME_PRECISION       | NULL
    INTERVAL_TYPE            | NULL
    INTERVAL_PRECISION       | NULL
    TYPE_UDT_CATALOG         | NULL
    TYPE_UDT_SCHEMA          | NULL
    TYPE_UDT_NAME            | NULL
    SCOPE_CATALOG            | NULL
    SCOPE_SCHEMA             | NULL
    SCOPE_NAME               | NULL
    MAXIMUM_CARDINALITY      | NULL
    DTD_IDENTIFIER           | NULL
    ROUTINE_BODY             | SQL
    ROUTINE_DEFINITION       | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
    SELECT AlbumName
    FROM [fdec67e6a28d].[Music].[dbo].[Albums]
    WHERE ArtistId = @ArtistId
    EXTERNAL_NAME            | NULL
    EXTERNAL_LANGUAGE        | NULL
    PARAMETER_STYLE          | NULL
    IS_DETERMINISTIC         | NO
    SQL_DATA_ACCESS          | MODIFIES
    IS_NULL_CALL             | NULL
    SQL_PATH                 | NULL
    SCHEMA_LEVEL_ROUTINE     | YES
    MAX_DYNAMIC_RESULT_SETS  | -1
    IS_USER_DEFINED_CAST     | NO
    IS_IMPLICITLY_INVOCABLE  | NO
    CREATED                  | 2019-10-26 01:11:30.677
    LAST_ALTERED             | 2019-10-26 03:50:42.527
    (1 row affected)
    

    多くの列にnull値があることに気付くでしょう。このビューに関するMicrosoftのドキュメントには、これらの列の多くは常にNULLを返すと記載されています。 。また、それらの一部は将来の使用のために予約されているとも述べています。

    例3–返品手順のみ

    WHEREを使用できます 結果をストアドプロシージャのみまたは関数のみにフィルタリングする句。

    この例では、ストアドプロシージャだけが返されます。

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

    結果:

    +-------------------+------------------+----------------------+----------------+
    | ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
    |-------------------+------------------+----------------------+----------------|
    | Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
    | Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
    +-------------------+------------------+----------------------+----------------+
    (2 rows affected)
    

    例4–リターン関数のみ

    この例では、関数のみが返されます。

    SELECT 
      ROUTINE_CATALOG,
      ROUTINE_SCHEMA,
      ROUTINE_NAME,
      ROUTINE_TYPE
    FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_TYPE = 'FUNCTION';
    

    結果:

    +-------------------+------------------+-------------------+----------------+
    | ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME      | ROUTINE_TYPE   |
    |-------------------+------------------+-------------------+----------------|
    | Music             | dbo              | ISOweek           | FUNCTION       |
    | Music             | dbo              | ufn_AlbumsByGenre | FUNCTION       |
    +-------------------+------------------+-------------------+----------------+
    (2 rows affected)
    

    1. MicrosoftAccessでフォームヘッダーにロゴを追加する方法

    2. MaxScaleのフェイルオーバーメカニズムの使用方法

    3. PostgreSQLのディザスタリカバリにBarmanを使用する

    4. Entity Frameworkコア-大文字と小文字が区別されますか、それとも大文字と小文字が区別されませんか?