如何获得数据库里所有表的名字

简介:
如何获得数据库里所有表的名字
平时我们操作比较多的都是表里的数据,也许突然有一天会需要把所有表的名字都列出来看一看——比如,你的论坛是按每个版块一个表来管理的,这时候你要在首页列出各版块的名字。应该怎么办呢?
肯定得用SELECT吧……但我们平时使用SELECT操作的数据都是表里的数据,表的名字并不是表的数据,这可怎么办呢?
你可能会想:“功能强大的SQL Server不会连这么简单的功能都实现不了吧?一定会把所有表的名字存储在某个表里……”注意啦!在这儿我要小小地偷换一下概念了——视图(View)也算是一种“表”,只不过它是由固定查询形成的一种“虚拟表”。
OK,你猜对啦!由SQL Server管理的每个数据库里都有一个名为sysobjects的视图,它是system级别的,所以它的全限定名是——sys.sysobjects
你可能又会问:“为什么不是sys.tables而是sys.objects呢?”问的好!因为这张表里存储的可不光是数据库里的表,它存储的是一个数据库中所有的“对象”——杂七杂八包括了表的主键、存储过程、触发器等等, 一共是24种——表(Table,确切地说是“用户自定义表”)只是这24种对象中的一种。
剩下的事情……吼吼……
执行下面的查询语句,可以得到所有包含在sys.sysobjects视图里的数据
USE  AdventureWorks
SELECT   *
FROM  sys.sysobjects
GO
得出数据后,请注意名为type的列——这一列标明了对象的类型,也就是前面提到的24种。在这里,我用一个表格把它们列出来:
AF = Aggregate function (CLR)
C = CHECK constraint
D = DEFAULT (constraint or stand-alone)
F = FOREIGN KEY constraint
FN = SQL scalar function
FS = Assembly (CLR) scalar function
FT = Assembly (CLR) table-valued function
IF = SQL inline table-valued function
IT = Internal table
P = SQL stored procedure
PC = Assembly (CLR) stored procedure
PK = PRIMARY KEY constraint
R = Rule (old-style, stand-alone)
RF = Replication-filter-procedure
S = System base table
SN = Synonym
SQ = Service queue
TA = Assembly (CLR) DML trigger
TF = SQL table-valued-function
TR = SQL DML trigger
U = Table (user-defined)
UQ = UNIQUE constraint
V = View
X = Extended stored procedure
OK,我们要得到名称的表(用户自定义表)就是类型为“U”的对象;而sys.objects的类型为“S”。所以,为了达到我们的最终目的,SQL语句应该是——
USE  AdventureWorks
SELECT  name
FROM  sys.sysobjects
WHERE  type = ' U '
GO
 
 下面我再给出一段用C#实现的代码:
  
//========< 水之真谛 >========//
//====<
以人为本,关注民生 >====//
//   [url]http://blog.csdn.net/FantasiaX[/url]   //
using  System;
using System.Data.SqlClient;

namespace SqlSample
{
         class Program
         {
                   static void Main(string[] args)
                   {
                            string connectionString = @"Server=(local); Database=AdventureWorks; User ID=sa; Password=password";
                            SqlConnection connection = new SqlConnection();
                            connection.ConnectionString = connectionString;

                            string sqlCommandString = @"USE AdventureWorks SELECT name FROM sys.sysobjects WHERE type='U' ORDER BY name";
                            SqlCommand command = new SqlCommand();
                            command.CommandType = System.Data.CommandType.Text;
                            command.CommandText = sqlCommandString;
                            command.Connection = connection;
                            connection.Open();

                            SqlDataReader reader = command.ExecuteReader();
                            while (reader.Read())
                            {
                                     Console.WriteLine(reader[@"name"]);
                            }
                   }
         }
}

运行后得到的截图是:
  
嗯~~~小问题也要认真对待~~~细节体现品质。我要把这个问题加到面试题里去,呵呵~~~




本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/37097,如需转载请自行联系原作者
目录
相关文章
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
SQL 数据库 数据库管理
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
396 11
|
SQL 数据库 索引
数据库中表维护
【5月更文挑战第7天】本文介绍了提高数据库性能的五个技巧。1) 使用`ON DUPLICATE KEY UPDATE`或`ON CONFLICT DO UPDATE`避免锁竞争,尤其在高并发更新计数器场景下。2) 通过JOIN查询进行基于选择的更新。3) 使用公式表达式-CTE-删除重复行 。4) 定期运行`ANALYZE`命令更新表统计信息。这些方法有助于优化数据库性能,减少锁等待和提高查询速度。
262 1
数据库中表维护
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
SQL 存储 数据库
SQL 撤销索引、撤销表以及撤销数据库
SQL 撤销索引、撤销表以及撤销数据库
263 4
|
SQL 存储 数据管理
数据管理DMS产品使用合集之如何把整个数据库的表和数据全部导出来
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
378 2
|
SQL 关系型数据库 MySQL
【MySQL】——用SQL语句实现数据库和基本表的创建
【MySQL】——用SQL语句实现数据库和基本表的创建
【MySQL】——用SQL语句实现数据库和基本表的创建
|
SQL Java 持续交付
实时计算 Flink版产品使用问题之源数据库一直在新增表或修改表结构,需要进行相应的修改和重启,该如何简化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL Apache 数据库
doris数据库的表重命名语法是什么
【6月更文挑战第24天】doris数据库的表重命名语法是什么
3190 0
|
存储 数据库连接 数据库
逆向学习数据库篇:表设计和数据库操作的核心概念与流程
逆向学习数据库篇:表设计和数据库操作的核心概念与流程
158 0

热门文章

最新文章