2012-02-07 3 views
0

Я хочу получить всю информацию о таблице. Как TABLENAME, ColumnName, InPrimaryKey, Является UniqueKey, является удостоверением, Datatype, MAXLENGTH, Является ForiegnKeyПолучить всю информацию таблицы в SQL Server

с помощью встроенного API из SQL SERVER как INFORMATION_SCHEMA.COLUMNS

+0

Вы хотите получить данные или вы хотите получить данные о данных (метаданных)? –

+2

Каков ваш вопрос? Вы говорите, что хотите использовать information_schema.columns .. well: 'select * from information_schema.columns' то? – Blorgbeard

+0

Для некоторых аргументов * против * представлений 'INFORMATION_SCHEMA' см. Http://sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/the-case-against-information-schema-views.aspx –

ответ

1

Использование SQL Server Management Objects (SMO). Это удобный и полностью управляемый API для получения и управления схемой базы данных SQL Server.

2

Вы могли бы начать с:

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. Это еще более запутанно, чем выше, - вы ищете все внешние ключи текущей таблицы, которые указывают на другие таблицы, все внешние ключи в других таблицах, указывающих на это, или и то, и другое?

0

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

select * from table where 0 = 1 

в данном стол. Столбцы будут скопированы и готовы к проверке.

+0

К сожалению, это ничего не говорит о первичных ключах, уникальных ограничениях, индексах, внешних ключах и т. д. Некоторые свойства сохраняются (если вы имели в виду 'SELECT INTO'), но не все. Тем не менее, как новый стол более «готов к проверке», чем старый стол? –

0

Если вы хотите создать рабочий проект, мой создатель хранимой процедуры/создатель объекта класса читает схему базы данных для всех таблиц и представлений в базе данных.

код доступен на http://radstudio.codeplex.com

Файл называется DataClassBuilder.Net.dll содержит метод, называемый LoadDatabaseSchema() и LoadDataFieldsSchema() должен предоставить вам всю необходимую информацию о данных.

Смежные вопросы