Запрос полного типа данных столбца 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

Другие вопросы по тегам