Где найти метаданные 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