Где найти метаданные Sql Server для типов данных столбцов?

Я знаю, что я могу получить доступ к свойствам столбца с помощью:

select * 
from sysobjects

Однако я не могу найти информацию о том, где можно получить тип и длину шрифта для столбца, то есть: в

FOO VARCHAR(80)

Где я могу найти часть VARCHAR (80) "объявления типа в таблицах метаданных?

Я попытался посмотреть таблицу systypes, но ее значения для xtype не соответствуют значениям xtype в таблице sysobjects.

* У меня нет доступа к исходному SQL, используемому для создания этих таблиц, и у меня нет прав администратора.

Если вы знакомы с DB2, я ищу эквивалент

select name,
       coltype,
       length,
  from sysibm.syscolumns
where tbname = 'FOO'

Ответ 1

Вы находитесь рядом. Вы можете посмотреть на sys.columns, чтобы получить столбцы.

Вы можете фильтровать таблицу с помощью OBJECT_ID=OBJECT_ID('dbo.Foo').

Вы можете получить длину от sys.columns. Тип данных находится в поле system_type. Ключи для этого поля находятся в sys.types.

В целом вы можете сделать:

select object_NAME(c.object_id), c.name, t.name, c.max_length
from sys.columns c
INNER JOIN sys.types t
    ON t.system_type_id = c.system_type_id

В качестве примечания, в SQL Server системные таблицы устарели (например, syscolumns, sysobjects), и рекомендуется использовать вместо них представления, sys.columns, sys.objects и т.д.

Это даст вам таблицу, столбец, тип данных и максимальную длину для каждого из них.

Ответ 2

Правильный способ сделать это - присоединиться к пользователю _type_id в таблице sys.types:

select object_NAME(c.object_id), c.name, t.name, c.max_length
from sys.columns c
INNER JOIN sys.types t
    ON t.user_type_id = c.user_type_id

user_type_id идентичен system_type_id для типов систем - см. документацию: https://msdn.microsoft.com/en-gb/library/ms188021.aspx