【问题标题】:Dynamically List Fields from a Database Table动态列出数据库表中的字段
【发布时间】:2012-04-13 13:26:30
【问题描述】:

有没有办法查询数据库以检索有关表架构的信息?我只对获取列名列表以及它们是否是主键感兴趣;这可能吗?我不关心类型,只关心它的名称以及它是否是主键。

样本表:

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。我认为这应该可以使用系统表,但我不知道该怎么做。

【问题讨论】:

    标签: c# sql sql-server-2008 c#-4.0


    【解决方案1】:
    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
    

    系统视图包含大量数据且易于使用。

    【讨论】:

    • 加入 sys.indexes 和 sys.index_columns 表的连接以获得主键信息。
    • 我认为 PK 在 sys.columns 中。聚集索引在 sys.index 中,但这是一个不同的概念。
    【解决方案2】:

    您可以通过这种 hacky 查询获取字段名称

    select * from Organism where 1=2
    

    元数据可以用Information Schema Views检索,例如密钥用法:

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

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 2018-08-26
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 2012-02-01
      • 2013-09-23
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多