如何获取SQL Server所有表

1. 整体流程

以下是获取SQL Server所有表的整体流程:

步骤 描述
1 连接到SQL Server数据库
2 查询数据库中的所有表
3 遍历表列表,获取每个表的信息
4 保存表信息,并输出结果

2. 代码实现

2.1 连接到SQL Server数据库

使用以下代码连接到SQL Server数据库:

using System;
using System.Data.SqlClient;

string connectionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // 连接成功,可以执行查询操作
}

其中,ServerName是SQL Server的名称,DatabaseName是要连接的数据库名称,UserNamePassword是连接数据库所需的用户名和密码。

2.2 查询数据库中的所有表

使用以下代码查询数据库中的所有表:

using (SqlCommand command = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'", connection))
{
    using (SqlDataReader reader = command.ExecuteReader())
    {
        // 循环遍历读取表名
        while (reader.Read())
        {
            string tableName = reader.GetString(0);
            // 获取到表名后,可以执行获取表信息的操作
        }
    }
}

此查询语句使用了INFORMATION_SCHEMA.TABLES系统视图来获取数据库中的所有表信息。

2.3 获取表信息

使用以下代码获取每个表的信息:

string tableQuery = "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName";

using (SqlCommand tableCommand = new SqlCommand(tableQuery, connection))
{
    tableCommand.Parameters.AddWithValue("@TableName", tableName);
    
    using (SqlDataReader tableReader = tableCommand.ExecuteReader())
    {
        // 循环遍历读取表的列信息
        while (tableReader.Read())
        {
            string columnName = tableReader.GetString(0);
            string dataType = tableReader.GetString(1);
            int? maxLength = tableReader.IsDBNull(2) ? null : (int?)tableReader.GetInt32(2);
            bool isNullable = tableReader.GetString(3).Equals("YES", StringComparison.OrdinalIgnoreCase);
            // 可以根据需要处理表的列信息
        }
    }
}

此查询语句使用了INFORMATION_SCHEMA.COLUMNS系统视图来获取指定表的列信息。其中,@TableName是一个参数,用于指定要获取信息的表名。

2.4 保存表信息并输出结果

使用以下代码保存表信息并输出结果:

List<TableInfo> tableList = new List<TableInfo>();

// 循环遍历获取的表信息,保存到集合中
tableList.Add(new TableInfo(tableName, columnList));

// 输出结果
foreach (TableInfo table in tableList)
{
    Console.WriteLine("表名:" + table.Name);
    Console.WriteLine("列信息:");
    foreach (ColumnInfo column in table.Columns)
    {
        Console.WriteLine("列名:" + column.Name);
        Console.WriteLine("数据类型:" + column.DataType);
        Console.WriteLine("最大长度:" + (column.MaxLength.HasValue ? column.MaxLength.Value.ToString() : "无限制"));
        Console.WriteLine("是否可为空:" + (column.IsNullable ? "是" : "否"));
    }
    Console.WriteLine();
}

2.5 完整代码

以下是获取SQL Server所有表的完整代码示例:

using System;
using System.Collections.Generic;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            
            List<TableInfo> tableList = new List<TableInfo>();

            using (SqlCommand command = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'", connection))
            {
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        string tableName = reader.GetString(0);

                        string tableQuery = "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName";

                        using (SqlCommand tableCommand = new SqlCommand(tableQuery, connection))
                        {
                            tableCommand.Parameters.AddWithValue("@TableName", tableName);

                            using (SqlDataReader tableReader = tableCommand.ExecuteReader())
                            {
                                List<ColumnInfo> columnList = new List<ColumnInfo>();
                                while (tableReader.Read())
                                {
                                    string columnName = tableReader.GetString(0);
                                    string dataType = tableReader.GetString(