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

SQL Serverのリンクサーバーから列情報を返す(T-SQLの例)

    SQL Serverでは、sp_columns_exを使用できます 指定されたリンクサーバーからの列に関する列情報を返すシステムストアドプロシージャ。

    個々の列を指定することも、特定のデータベースやテーブルなどからすべての列を指定することもできます。

    構文

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

    sp_columns_ex [ @table_server = ] 'table_server'   
         [ , [ @table_name = ] 'table_name' ]   
         [ , [ @table_schema = ] 'table_schema' ]   
         [ , [ @table_catalog = ] 'table_catalog' ]   
         [ , [ @column_name = ] 'column' ]   
         [ , [ @ODBCVer = ] 'ODBCVer' ]
    

    @table_server 引数は唯一の必須の引数です。これは、テーブル情報が必要なリンクサーバーの名前です。

    他の引数はオプションであり、次の例でそれらのほとんどをカバーします。これらの引数の詳細については、Microsoftのドキュメントを参照してください。

    例1-特定の列を返す

    次の例は、特定の列に関する情報を返します。

    EXEC sp_columns_ex 
      @table_server = 'Homer',   
      @table_name = 'Artists',   
      @table_schema = 'dbo',   
      @table_catalog = 'Music',   
      @column_name = 'ArtistName';
    

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

    TABLE_CAT         | Music
    TABLE_SCHEM       | dbo
    TABLE_NAME        | Artists
    COLUMN_NAME       | ArtistName
    DATA_TYPE         | -9
    TYPE_NAME         | nvarchar
    COLUMN_SIZE       | 255
    BUFFER_LENGTH     | 510
    DECIMAL_DIGITS    | NULL
    NUM_PREC_RADIX    | NULL
    NULLABLE          | 0
    REMARKS           | NULL
    COLUMN_DEF        | NULL
    SQL_DATA_TYPE     | -9
    SQL_DATETIME_SUB  | NULL
    CHAR_OCTET_LENGTH | 510
    ORDINAL_POSITION  | 2
    IS_NULLABLE       | NO
    SS_DATA_TYPE      | 39
    

    この場合、サーバー名はHomerです。 、データベース名はMusicです。 、テーブル名はArtistsです。 、テーブルスキーマはdboです 列名はArtistName

    これは次のように行うこともできます:

    EXEC sp_columns_ex 
      'Homer',   
      'Artists',   
       'dbo',   
      'Music',   
      'ArtistName';
    

    例2–テーブルのみを指定する

    この例では、テーブル名のみを指定します。

    EXEC sp_columns_ex 
      @table_server = 'Homer',  
      @table_name = 'Artists';
    

    これにより、 Artists のすべての列に関する情報が返されます テーブル。

    例3–データベースと列の名前を指定する

    この例では、データベースと列を指定していますが、テーブルは指定していません。

    EXEC sp_columns_ex 
      @table_server = 'Homer', 
      @table_catalog = 'Music',   
      @column_name = 'ArtistName';
    

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

    -[ RECORD 1 ]-------------------------
    TABLE_CAT         | Music
    TABLE_SCHEM       | dbo
    TABLE_NAME        | Artists
    COLUMN_NAME       | ArtistName
    DATA_TYPE         | -9
    TYPE_NAME         | nvarchar
    COLUMN_SIZE       | 255
    BUFFER_LENGTH     | 510
    DECIMAL_DIGITS    | NULL
    NUM_PREC_RADIX    | NULL
    NULLABLE          | 0
    REMARKS           | NULL
    COLUMN_DEF        | NULL
    SQL_DATA_TYPE     | -9
    SQL_DATETIME_SUB  | NULL
    CHAR_OCTET_LENGTH | 510
    ORDINAL_POSITION  | 2
    IS_NULLABLE       | NO
    SS_DATA_TYPE      | 39
    -[ RECORD 2 ]-------------------------
    TABLE_CAT         | Music
    TABLE_SCHEM       | dbo
    TABLE_NAME        | BluesAlbums
    COLUMN_NAME       | ArtistName
    DATA_TYPE         | -9
    TYPE_NAME         | nvarchar
    COLUMN_SIZE       | 255
    BUFFER_LENGTH     | 510
    DECIMAL_DIGITS    | NULL
    NUM_PREC_RADIX    | NULL
    NULLABLE          | 0
    REMARKS           | NULL
    COLUMN_DEF        | NULL
    SQL_DATA_TYPE     | -9
    SQL_DATETIME_SUB  | NULL
    CHAR_OCTET_LENGTH | 510
    ORDINAL_POSITION  | 2
    IS_NULLABLE       | NO
    SS_DATA_TYPE      | 39
    -[ RECORD 3 ]-------------------------
    TABLE_CAT         | Music
    TABLE_SCHEM       | dbo
    TABLE_NAME        | JazzAlbums
    COLUMN_NAME       | ArtistName
    DATA_TYPE         | -9
    TYPE_NAME         | nvarchar
    COLUMN_SIZE       | 255
    BUFFER_LENGTH     | 510
    DECIMAL_DIGITS    | NULL
    NUM_PREC_RADIX    | NULL
    NULLABLE          | 0
    REMARKS           | NULL
    COLUMN_DEF        | NULL
    SQL_DATA_TYPE     | -9
    SQL_DATETIME_SUB  | NULL
    CHAR_OCTET_LENGTH | 510
    ORDINAL_POSITION  | 2
    IS_NULLABLE       | NO
    SS_DATA_TYPE      | 39
    -[ RECORD 4 ]-------------------------
    TABLE_CAT         | Music
    TABLE_SCHEM       | dbo
    TABLE_NAME        | RockAlbums
    COLUMN_NAME       | ArtistName
    DATA_TYPE         | -9
    TYPE_NAME         | nvarchar
    COLUMN_SIZE       | 255
    BUFFER_LENGTH     | 510
    DECIMAL_DIGITS    | NULL
    NUM_PREC_RADIX    | NULL
    NULLABLE          | 0
    REMARKS           | NULL
    COLUMN_DEF        | NULL
    SQL_DATA_TYPE     | -9
    SQL_DATETIME_SUB  | NULL
    CHAR_OCTET_LENGTH | 510
    ORDINAL_POSITION  | 2
    IS_NULLABLE       | NO
    SS_DATA_TYPE      | 39
    

    これにより、さらに3つの列が返されました。これらはたまたま3つの異なるビューからのものです(データベースにはArtistNameを持つ3つのビューがあります 列:BluesAlbumsJazzAlbums 、およびRockAlbums

    例4–データベースのみを指定する

    ここではデータベースのみを指定します:

    EXEC sp_columns_ex 
      @table_server = 'Homer', 
      @table_catalog = 'Music';
    

    約6,000行が返されたため、ここでは結果を表示しません。これらのほとんどはsysからのものでした テーブルスキーマ。

    例5–テーブルスキーマを指定する

    次の例では、結果を特定のテーブルスキーマ(dbo)に絞り込みます。 。

    EXEC sp_columns_ex 
      @table_server = 'Homer',  
      @table_schema = 'dbo';
    

    これにより、前の例よりもはるかに小さい結果セットが返されました。まだかなり大きいので、ここには表示しません。

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

    ワイルドカード文字を使用することもできます。 %の使用例を次に示します。 ワイルドカード文字:

    EXEC sp_columns_ex 
      @table_server = 'Homer',  
      @table_schema = 'dbo',
      @table_catalog = 'Music',   
      @column_name = 'Ar%';
    

    これにより、Arで始まるすべての列が返されます 。私の場合、2つの ArtistId が返されました 列と4つの ArtistName 列。

    これを絞り込むことができます:

    EXEC sp_columns_ex 
      @table_server = 'Homer',  
      @table_schema = 'dbo',
      @table_catalog = 'Music',   
      @column_name = 'Ar%Name';
    

    これは ArtistName だけを返しました 列。

    ただし、rを削除すると :

    EXEC sp_columns_ex 
      @table_server = 'Homer',  
      @table_schema = 'dbo',
      @table_catalog = 'Music',   
      @column_name = 'A%Name';
    

    AlbumName という4つの追加の列を取得しました (および ArtistName 列)。


    1. MariaDBでのATAN()のしくみ

    2. PostgreSQL-GROUPBY句または集計関数で使用

    3. T-SQLを使用してリンクサーバー上にテーブルを作成する2つの方法

    4. Postgres/JSON-すべての配列要素を更新します