Где найти метаданные Sql Server для типов данных столбцов? - PullRequest
11 голосов
/ 07 февраля 2012

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

select * 
from sysobjects

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

FOO VARCHAR(80)

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

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

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

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

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

Ответы [ 2 ]

15 голосов
/ 07 февраля 2012

Вы рядом.Вы можете посмотреть на 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 и т. Д.

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

4 голосов
/ 23 января 2017

Правильный способ сделать это - присоединиться к user _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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...