Запрос полного типа данных столбца MSSQL
Мне нужно запросить полный тип данных столбцов, в конечном итоге с указанием длины.
Если я использую 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'
1 ответ
Найдите приведенный ниже запрос, если результат будет вам удовлетворительным или поможет приблизиться к результату.
Выбрать
t.object_id в качестве "идентификатора таблицы",
имя_объекта (t.object_id) как "Имя таблицы",
c.column_id 'Столбец ID',
c.name как "имя столбца",
c.system_type_id как "Идентификатор типа данных",
ty.name + '(' + convert (varchar (10), c.max_length) + ')' как "Тип данных"
от
sys.tables t внутреннее соединение sys.columns c
на t.object_id=c.object_id
осталось присоединиться к sys.types ty
на c.system_type_id =ty.user_type_id