从SQL数据库中读取Schema Name, Table Name和Column Name,然后返回到c#代码

本文关键字:Name 然后 Column 返回 代码 Table 读取 Schema SQL 数据库 | 更新日期: 2023-09-27 18:17:25

我有一个DB(在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"} 

有人知道这个吗?

编辑:

在下一步中,我们如何获得每个列或相关属性的类型?

从SQL数据库中读取Schema Name, Table Name和Column Name,然后返回到c#代码

我的建议是在SQLElement中包含另一个成员DataType,如果您有更改权限或创建另一个具有属性名称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;

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

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

检查结果,然后偷看并选择您需要的

该查询将为您提供所有列名和模式名

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;

您必须执行上述查询并在list

中获取结果

查看数据库中的Information_Schema视图。里面已经有你想要的东西了