概要
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=テーブル名
;
結論
簡単になりました。
間違いなどありましたらコメントでご指導ください。