查询完整列数据类型MSSQL

时间:2015-03-10 12:05:02

标签: sql-server sqldatatypes system-views

我需要查询完整列数据类型,最终使用长度规范。

如果我使用 INFORMATION_SCHEMA.COLUMNS sp_Columns(@tablename),我会在不同的列中获取类型,大小和数字,我必须使用案例解码每个数据类型声明。

我写了一个这样的查询,但它不太稳固,我不确定总是对的。我希望有一种方法可以在一列中检索所有列类型。

这是我的查询,我仍然需要解码许多类型:

select
    a.TABLE_SCHEMA, 
    a.TABLE_NAME, 
    COLUMN_NAME, 
    case 
        when CHARACTER_MAXIMUM_LENGTH is not null then DATA_TYPE+'('+convert(varchar, CHARACTER_MAXIMUM_LENGTH)+')'
        when DATA_TYPE in ('int','datetime','time','date','text') then DATA_TYPE
        when DATA_TYPE in ('decimal','numeric') then DATA_TYPE+'('+convert(varchar,NUMERIC_PRECISION) +','+ convert(varchar,NUMERIC_SCALE) +')'
        else '' 
        end as FULL_DATA_TYPE
from INFORMATION_SCHEMA.COLUMNS a
inner join INFORMATION_SCHEMA.TABLES b
    on b.TABLE_NAME = a.TABLE_NAME
    and b.TABLE_SCHEMA = a.TABLE_SCHEMA
    and b.TABLE_TYPE = 'BASE TABLE'

1 个答案:

答案 0 :(得分:0)

如果结果出现令您满意,或者它可以帮助您接近结果,请查找以下查询

选择
t.object_id为'表ID',
object_name(t.object_id)为'表名',
c.column_id'列ID',
c.name为'列名',
c.system_type_id为'数据类型ID',
ty.name +'('+ convert(varchar(10),c.max_length)+')'为'数据类型'


    sys.tables t inner join sys.columns c
    在t.object_id = c.object_id
    left join sys.types ty
    在c.system_type_id = ty.user_type_id