2012-04-13 2 views
3

Есть ли способ запросить базу данных для получения информации о схеме таблицы? Мне интересно только получить список имен столбцов и являются ли они первичными ключами; Это возможно? Меня не волнует тип, просто его имя и является ли он первичным ключом.Динамическое отображение полей из таблицы базы данных

Пример таблицы:

Table Organism 
{ 
    primary: int ID; 
    int Kingdom; 
    int Phylum; 
    int Class; 
    int Genus; 
    int Species; 
    nvarchar(50) Name; 
} 

Пример использования:

List<Tuple<string, bool>> t = ReadTable("Organism"); 
t.ForEach(x => Console.WriteLine(x.Item2 ? x.Item2 + ": " + x.Item1 : x.Item1)); 

Пример вывода:

True ID 
Kingdom 
Phylum 
Class 
Genus 
Species 
Name 

Я использую C# 4.0 и SQL Server 2008 R2. I думаю это должно быть возможно с использованием системных таблиц, но я не знаю, как это сделать.

ответ

2
select col.* 
from sys.columns col 
join sys.tables tab on col.object_id = tab.object_id 
where tab.name = @tabName 
order by col.column_id 

Системные представления содержат множество данных, и они просты в использовании.

+0

Бросок в присоединяется к таблице sys.indexes и SYS. index_columns, чтобы получить информацию о первичных ключах. –

+0

Я думаю, что ПК находится в sys.columns. Кластеризованный индекс находится в sys.index, но это другая концепция. – usr

1

Вы можете получить имена полей с таким Hacky запросом

select * from Organism where 1=2 

и метаданные могут быть получены с помощью Information Schema Views, например, использования ключа:

SELECT * FROM databaseName.INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
Where TABLE_NAME='Organism'