如何获取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
是要连接的数据库名称,UserName
和Password
是连接数据库所需的用户名和密码。
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(