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

SQLServerデータベース内のすべてのユーザー定義関数を返す2つの方法

    この記事では、SQLServerデータベース内のユーザー定義関数のリストを返す2つの方法を紹介します。

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

    ROUTINESを使用できます データベース内のすべてのユーザー定義関数のリストを取得するための情報スキーマビュー。

    このビューはストアドプロシージャと関数を返すため、WHEREを追加する必要があります 関数だけに絞り込むための句。

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

    結果:

    +------------------+-------------------------+----------------+-------------+
    | ROUTINE_SCHEMA   | ROUTINE_NAME            | ROUTINE_TYPE   | DATA_TYPE   |
    |------------------+-------------------------+----------------+-------------|
    | dbo              | ISOweek                 | FUNCTION       | int         |
    | dbo              | ufn_AlbumsByGenre       | FUNCTION       | TABLE       |
    | dbo              | ufn_AlbumsByArtist      | FUNCTION       | TABLE       |
    | dbo              | ufn_AlbumsByGenre_MSTVF | FUNCTION       | TABLE       |
    +------------------+-------------------------+----------------+-------------+
    

    関数の定義を返す

    このビューには、ROUTINE_DEFINITIONもあります 列なので、必要に応じて各関数の定義を簡単に返すことができます。

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

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

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

    SELECT 
      SCHEMA_NAME(schema_id) AS [Schema],
      name,
      type_desc
    FROM sys.objects
    WHERE type IN ('AF','FN','FS','FT','IF','TF');
    
    >

    結果:

    +----------+-------------------------+----------------------------------+
    | Schema   | name                    | type_desc                        |
    |----------+-------------------------+----------------------------------|
    | dbo      | ISOweek                 | SQL_SCALAR_FUNCTION              |
    | dbo      | ufn_AlbumsByGenre       | SQL_INLINE_TABLE_VALUED_FUNCTION |
    | dbo      | ufn_AlbumsByArtist      | SQL_INLINE_TABLE_VALUED_FUNCTION |
    | dbo      | ufn_AlbumsByGenre_MSTVF | SQL_TABLE_VALUED_FUNCTION        |
    +----------+-------------------------+----------------------------------+
    

    ここでは、すべての関数タイプをWHEREに明示的に含めました。 句。

    アドホッククエリを実行しているが、すべてのタイプを思い出せない場合は、次のようにすることができます。

    SELECT 
      SCHEMA_NAME(schema_id) AS [Schema],
      name,
      type_desc
    FROM sys.objects
    WHERE type_desc LIKE '%FUNCTION';
    

    またはこれ:

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

    関数の定義を返す

    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 IN ('AF','FN','FS','FT','IF','TF');
    

    1. ビデオ:RACでのOracle12cIDENTITY列のパフォーマンス

    2. SQLトレース、Oracleでの10046イベント:trcsess、tkprofユーティリティ

    3. MySQL ATAN2()関数–2つの値のアークタンジェントを返します

    4. UnitilsとDBMaintainer-複数のユーザー/スキームでそれらを機能させる方法は?