Вы могли бы начать с:
EXEC sp_help 'dbo.tablename';
Тогда вы могли бы посмотреть на колоннах прямо:
SELECT
c.name,
[type] = t.name,
c.max_length,
c.[precision],
c.[scale],
c.is_nullable,
c.is_identity
FROM sys.columns AS c
INNER JOIN sys.types AS t
ON c.system_type_id = t.system_type_id
AND c.user_type_id = t.user_type_id
WHERE c.[object_id] = OBJECT_ID('dbo.tablename');
Индексы и участие в ПК & уникальных ограничений, внешние ключи и т.д. немного более сложным , поскольку несколько столбцов могут участвовать в любом из этих объектов. Вот индексы и PK/UQ ограничения:
SELECT
[index] = i.name,
i.type_desc,
i.is_unique,
i.is_primary_key,
i.is_unique_constraint,
c.name,
ic.is_included_column
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.[object_id] = ic.[object_id]
INNER JOIN sys.columns AS c
ON ic.[object_id] = c.[object_id]
AND ic.index_id = i.index_id
AND ic.column_id = c.column_id
WHERE i.[object_id] = OBJECT_ID('dbo.tablename');
И тогда вы могли бы перейти на внешние ключи, глядя на sys.foreign_keys
и sys.foreign_key_columns
. Это еще более запутанно, чем выше, - вы ищете все внешние ключи текущей таблицы, которые указывают на другие таблицы, все внешние ключи в других таблицах, указывающих на это, или и то, и другое?
Вы хотите получить данные или вы хотите получить данные о данных (метаданных)? –
Каков ваш вопрос? Вы говорите, что хотите использовать information_schema.columns .. well: 'select * from information_schema.columns' то? – Blorgbeard
Для некоторых аргументов * против * представлений 'INFORMATION_SCHEMA' см. Http://sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/the-case-against-information-schema-views.aspx –