从SQL DB读取架构名称,表名称和列名称并返回到C#代码

时间:2011-12-11 13:07:48

标签: c# sql sql-server tsql

我有一个数据库(在SQL Server 2008 SP3中),需要C#代码中相关层次结构中的所有模式名称,表名和列名,我有以下SQLElement类:

 public class SQLElement
{
    public string SchemaName { get; set; }
    public string TableName { get; set; }
    public string ColumnName { get; set; }
}

并有一个列表赞:

List<SQLElement> SQLElementCollection = new List<SQLElement>();

那么如何从DB中读取名称并将它们添加到此列表(SQLElementCollection)?

例如假设我们创建一个这样的表:

Create Table [General].[City] (
 [Id]           BIGINT          NOT NULL    IDENTITY(1, 1),
 [Title]        NVARCHAR(30)    NOT NULL    DEFAULT (N''),
 [Province_Id]  BIGINT          NOT NULL
)

我需要列表如下:

[0]={SchemaName="General", TableName="City", ColumnName="Id"} 
[1]={SchemaName="General", TableName="City", ColumnName="Title"} 
[2]={SchemaName="General", TableName="City", ColumnName="Province_Id"} 

有人对此有任何想法吗?

修改

下一步我们如何获取每列或相关属性的类型?

4 个答案:

答案 0 :(得分:6)

我的建议是在DataType中添加其他成员SQLElement,如果您有更改权限或创建另一个具有属性名称DataType的类,然后从SQLElement继承,然后将数据类型名称保存到其中供以后使用,并使用下面的查询查询所有信息,谢谢

SELECT t.name AS TableName,
    SCHEMA_NAME(t.schema_id) AS SchemaName,
    c.name AS ColumnName,
    tp.name as DataType
FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    INNER JOIN sys.types tp ON c.system_type_id =  tp.system_type_id
ORDER BY TableName;

答案 1 :(得分:2)

连接到您的数据库并执行以下语句:

select * 
from INFORMATION_SCHEMA.COLUMNS 
order by TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION;

检查结果,然后查看并选择您需要的内容。

答案 2 :(得分:1)

此查询将为您提供所有列名称和架构名称

SELECT t.name AS tblName,
SCHEMA_NAME(schema_id) AS [schemaName],
c.name AS colName
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
where SCHEMA_NAME(schema_id) = 'dbo' // you can include this where clause  if you want to add additional filter to the result set, like query only tables that belong in particular db schema, or query only tables that starts with particular name (maybe prefix or sufix), etc.
ORDER BY tblName;

你必须执行上述查询并在列表中取结果

答案 3 :(得分:0)

查看数据库中的Information_Schema视图。这些包含你想要的所有东西。