我需要查询完整的列数据类型,最终使用长度规范。
如果我使用INFORMATION_SCHEMA.COLUMNS或sp_Columns(@tablename)我会在不同的列中获得类型、大小和数字,并且我必须使用 case 语句对每种数据类型进行解码。
我写了一个这样的查询,但它不是很可靠,我不确定它是否总是正确的。我希望有一种方法可以检索一列中的所有列类型。
这是我的查询,我仍然需要解码许多类型:
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'