テーブル・カラムの情報はsys.tablesとかからとれます。

概要

SQL Serverにはディクショナリテーブルってないんだと思い込んでいましたので、sp_tablesとかsp_columnsとかを使っていました。ストアド内からも。

declare @sp_columns_result table(
  table_qualifier sysname
  ,table_owner sysname
  ,table_name sysname
  ,column_name sysname
  ,data_type smallint
  ,type_name sysname
  ,precision int
  ,length int
  ,scale smallint
  ,radix smallint
  ,nullable smallint
  ,remarks varchar(254)
  ,column_def nvarchar(4000)
  ,sql_data_type smallint
  ,sql_datetime_sub smallint
  ,char_octet_length int
  ,ordinal_position int
  ,is_nullable varchar(254)
  ,ss_data_type tinyint
);
insert into @sp_columns_result exec sp_columns @table_name=テーブル名;
select hogehoge from @sp_columns_result where fugefuge;

どう考えてもめんどくさいです。なんとかならんのか。

ディクショナリテーブルありました

sys.tables, sys.columns, sys.types などです。
カラム名とその型・サイズの一覧は下記でとれます。

select
    sc.name as col_name
    ,ty.name as type_name
    ,sc.max_length
    ,sc.precision
    ,sc.scale
    from
        sys.tables as st
        inner join sys.columns as sc on (st.object_id=sc.object_id)
        inner join sys.types as ty on (sc.user_type_id=ty.user_type_id)
    where st.name=テーブル名
;

結論

簡単になりました。

間違いなどありましたらコメントでご指導ください。

コメントを残す