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

SQL Serverのストアドプロシージャの列情報を返す:sp_sproc_columns

    SQL Serverでは、 sp_sproc_columns システムストアドプロシージャを使用すると、現在のシステムの特定のストアドプロシージャまたはユーザー定義関数の列情報を取得できます。

    これは、ODBCのSQLProcedureColumnsと同等です。

    構文

    構文は次のようになります:

    sp_sproc_columns [[@procedure_name = ] 'name']   
        [ , [@procedure_owner = ] 'owner']   
        [ , [@procedure_qualifier = ] 'qualifier']   
        [ , [@column_name = ] 'column_name']  
        [ , [@ODBCVer = ] 'ODBCVer']  
        [ , [@fUsePattern = ] 'fUsePattern']
    

    すべての引数はオプションです。これらの詳細な説明については、Microsoftのドキュメントを参照してください。

    例1-引数を指定しない

    引数を指定せずにストアドプロシージャを実行できます。このように:

    EXEC sp_sproc_columns
    

    またはこのように:

    sp_sproc_columns
    

    これにより、現在のデータベース内のすべてのストアドプロシージャとユーザー定義関数が返されます。 WideWorldImportersサンプルデータベースに対してこれを実行すると、9077行が取得されます。次の例では、1つに絞り込みます。

    例2–すべての引数を指定する

    すべての引数を含めると、次のようになります。

    EXEC sp_sproc_columns 
      @procedure_name = 'GetCityUpdates',
      @procedure_owner = 'Integration',
      @procedure_qualifier = 'WideWorldImporters',
      @column_name = '@RETURN_VALUE',
      @ODBCVer = 2,
      @fUsePattern = 1;
    

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

    PROCEDURE_QUALIFIER | WideWorldImporters
    PROCEDURE_OWNER     | Integration
    PROCEDURE_NAME      | GetCityUpdates;1
    COLUMN_NAME         | @RETURN_VALUE
    COLUMN_TYPE         | 5
    DATA_TYPE           | 4
    TYPE_NAME           | int
    PRECISION           | 10
    LENGTH              | 4
    SCALE               | 0
    RADIX               | 10
    NULLABLE            | 0
    REMARKS             | NULL
    COLUMN_DEF          | NULL
    SQL_DATA_TYPE       | 4
    SQL_DATETIME_SUB    | NULL
    CHAR_OCTET_LENGTH   | NULL
    ORDINAL_POSITION    | 0
    IS_NULLABLE         | NO
    SS_DATA_TYPE        | 56
    

    この場合、 GetCityUpdates の戻り値に関する情報を返します。 ストアドプロシージャ。

    例3–ストアドプロシージャ(または関数)のみを指定する

    すべての引数を含めるのではなく、ストアドプロシージャの名前だけを含めることができます。ただし、 @column_nameを指定しない場合 、これを行うと、各列の行が返されます。

    また、引数名を省略する(つまり、その値のみを含める)ことで、コードをより簡潔にすることができます。

    EXEC sp_sproc_columns GetCityUpdates;
    

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

    -[ RECORD 1 ]-------------------------
    PROCEDURE_QUALIFIER | WideWorldImporters
    PROCEDURE_OWNER     | Integration
    PROCEDURE_NAME      | GetCityUpdates;1
    COLUMN_NAME         | @RETURN_VALUE
    COLUMN_TYPE         | 5
    DATA_TYPE           | 4
    TYPE_NAME           | int
    PRECISION           | 10
    LENGTH              | 4
    SCALE               | 0
    RADIX               | 10
    NULLABLE            | 0
    REMARKS             | NULL
    COLUMN_DEF          | NULL
    SQL_DATA_TYPE       | 4
    SQL_DATETIME_SUB    | NULL
    CHAR_OCTET_LENGTH   | NULL
    ORDINAL_POSITION    | 0
    IS_NULLABLE         | NO
    SS_DATA_TYPE        | 56
    -[ RECORD 2 ]-------------------------
    PROCEDURE_QUALIFIER | WideWorldImporters
    PROCEDURE_OWNER     | Integration
    PROCEDURE_NAME      | GetCityUpdates;1
    COLUMN_NAME         | @LastCutoff
    COLUMN_TYPE         | 1
    DATA_TYPE           | -9
    TYPE_NAME           | datetime2
    PRECISION           | 27
    LENGTH              | 54
    SCALE               | 7
    RADIX               | NULL
    NULLABLE            | 1
    REMARKS             | NULL
    COLUMN_DEF          | NULL
    SQL_DATA_TYPE       | -9
    SQL_DATETIME_SUB    | 3
    CHAR_OCTET_LENGTH   | NULL
    ORDINAL_POSITION    | 1
    IS_NULLABLE         | YES
    SS_DATA_TYPE        | 0
    -[ RECORD 3 ]-------------------------
    PROCEDURE_QUALIFIER | WideWorldImporters
    PROCEDURE_OWNER     | Integration
    PROCEDURE_NAME      | GetCityUpdates;1
    COLUMN_NAME         | @NewCutoff
    COLUMN_TYPE         | 1
    DATA_TYPE           | -9
    TYPE_NAME           | datetime2
    PRECISION           | 27
    LENGTH              | 54
    SCALE               | 7
    RADIX               | NULL
    NULLABLE            | 1
    REMARKS             | NULL
    COLUMN_DEF          | NULL
    SQL_DATA_TYPE       | -9
    SQL_DATETIME_SUB    | 3
    CHAR_OCTET_LENGTH   | NULL
    ORDINAL_POSITION    | 2
    IS_NULLABLE         | YES
    SS_DATA_TYPE        | 0
    

    例4–その他のバリエーション

    必要な情報だけを返すために、引数のバリエーションを提供できます。

    たとえば、特定のプロシージャの所有者からすべての情報を返すことができます。

    EXEC sp_sproc_columns @procedure_owner = 'Integration'
    

    または、すべてのプロシージャとユーザー定義関数からすべての戻り値に関する情報を取得できます。

    EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'
    

    もちろん、必要に応じて、いつでもプロシージャ修飾子を含めることができます。 SQL Serverでは、このパラメーターはデータベース名を表します。一部の製品では、テーブルのデータベース環境のサーバー名を表します。

    EXEC sp_sproc_columns 
      @column_name = '@RETURN_VALUE',
      @procedure_qualifier = 'WideWorldImporters';
    

    例5–ワイルドカード文字

    @fUsePattern 引数を使用すると、アンダースコア( _ )を指定するかどうかを指定できます )、パーセント( )、およびブラケット( [ ] )文字はワイルドカード文字として解釈されます。

    たとえば、次のコードを実行すると、 Get で始まるすべてのプロシージャとユーザー定義関数が返されます。 。

    EXEC sp_sproc_columns 
      @procedure_name = 'Get%',
      @fUsePattern = 1;
    

    したがって、私の場合、これはGetCityUpdates、GetCustomerUpdates、GetMovementUpdatesなどのプロシージャを返しました。

    ワイルドカード文字を無効にした場合:

    EXEC sp_sproc_columns 
      @procedure_name = 'Get%',
      @fUsePattern = 0;
    

    結果が出ません。


    1. SQL Serverの照合で、大文字と小文字を区別するものから大文字と小文字を区別しないものに変更しますか?

    2. SQL:優先度で並べ替えますが、最後に0を付けます

    3. SCDタイプ2

    4. PostgreSQLの誤った並べ替え