1

如何通过 SQL 语句或 Starcounter DB 背后的代码获取表名和定义列表?

4

1 回答 1

3

有关已创建表、其列和索引的元数据存储在元数据表中。数据库类针对相应的元数据表公开。

表或类型由Starcounter.Metadata.RawViewandStarcounter.Metadata.ClrClass和 both extends描述Starctouner.Metadata.TableClrClass仅包含加载的 CLR 类的描述,同时RawView描述所有创建的表。它们包括用户定义的类/表和元数据类/表的描述。

例如,可以枚举所有加载的用户定义类:

foreach(ClrClass c in Db.SQL<ClrClass>(
    "select c from Starcounter.Metadata.ClrClass c where Updatable = ?", true)) {
  Console.WriteLine(c.FullName);
}

Updatable的属性Table用于true用户定义的表和false元数据/系统表。

属性或列由Starcounter.Metadata.Member及其子项描述。枚举所有用户定义表的所有列的示例是:

foreach(Member m in Db.SQL<Member>(
    "select m from Column m, RawView v where m.Table = v and v.Updatable = ?",
    true)) {
  Console.WriteLine(m.Name);
}

索引由Starcounter.Metadata.Index和描述Starcounter.Metadata.IndexedColumn

目前它是数据库类和表之间的一对一匹配。但是,这个和元数据模式将来可能会改变。

于 2016-09-14T12:40:02.133 回答