我需要查询完整列数据类型,最终使用长度规范。
如果我使用 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'
答案 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