2015-03-10 6 views
0

Мне нужно запросить полный тип столбцов столбцов, в конечном итоге с указанием длины.Query full column datatypes MSSQL

Если я использую 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

Найдите ниже запрос, если результат пришел бы вам удовлетворительное или он может помочь вам приблизиться к результату

выберите
t.object_id как 'Таблица ID',
имя_объекта (t.object_id) как 'Table Name', '' Столбцы ID
c.column_id,
c.name как 'Column Name',
c.system_type_id как 'Тип данных ID',
ty.name + '(' + конвертировать (VARCHAR (10), c.max_length) + ')' как 'Тип данных'

от
sys.tables т внутреннее соединение sys.columns с
на t.object_id = c.object_id
покинул присоединиться sys.types ти
на c.system_type_id = ty.user_type_id

+0

Нет, потому что я получаю, как 'ДАННЫЕ int (4) 'или' decimal (13) '. В SQLServer 'declare @V int (4)' является синтаксической ошибкой, а decimal (13) не извлекают цифры точности. – Radioleao