惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
P
Proofpoint News Feed
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
量子位
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
博客园 - Franky
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog

博客园 - 带你去月球

【美食技术】家庭自制DIY鸡蛋饼和疙瘩汤早餐视频教程 部分组件无法创建,Scripting.FileSystemObject(FSO)对象的建立基础! Market info 2 LCID. c++ 函数指针 SQL索引 什么是win32编程 DHCP请求IP地址的过程 Ipconfig 用法 cd /d %~dp0是什么意思啊? 什么是托管 GAC&&强命名 - 带你去月球 - 博客园 C#的内存管理:堆栈、托管堆与指针 存储过程 C#值类型与引用类型的区别 _2 值类型跟引用类型的区别 simple reflection .net framework introduction 禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项。 - 带你去月球 system.exe HBKernel32.sys ace1f7.sys 手动清除 病毒
如何获得数据库里所有表的名字
带你去月球 · 2008-10-20 · via 博客园 - 带你去月球

平时我们操作比较多的都是表里的数据,也许突然有一天会需要把所有表的名字都列出来看一看——比如,你的论坛是按每个版块一个表来管理的,这时候你要在首页列出各版块的名字。应该怎么办呢?

肯定得用SELECT吧……但我们平时使用SELECT操作的数据都是表里的数据,表的名字并不是表的数据,这可怎么办呢?

你可能会想:“功能强大的SQL Server不会连这么简单的功能都实现不了吧?一定会把所有表的名字存储在某个表里……”注意啦!在这儿我要小小地偷换一下概念了——视图(View)也算是一种“表”,只不过它是由固定查询形成的一种“虚拟表”。

OK,你猜对啦!由SQL Server管理的每个数据库里都有一个名为sysobjects的视图,它是system级别的,所以它的全限定名是——sys.sysobjects

你可能又会问:“为什么不是sys.tables而是sys.objects呢?”问的好!因为这张表里存储的可不光是数据库里的表,它存储的是一个数据库中所有的“对象”——杂七杂八包括了表的主键、存储过程、触发器等等,一共是24种——表(Table,确切地说是“用户自定义表”)只是这24种对象中的一种。

剩下的事情……吼吼……

执行下面的查询语句,可以得到所有包含在sys.sysobjects视图里的数据

得出数据后,请注意名为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语句应该是——

 下面我再给出一段用C#实现的代码:

//========<水之真谛>========//
//====<
以人为本,关注民生>====//
//   http://blog.csdn.net/FantasiaX   //
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"]);
                            }
                   }
         }
}