如何获得数据库里所有表的名字
平时我们操作比较多的都是表里的数据,也许突然有一天会需要把所有表的名字都列出来看一看--比如,你的论坛是按每个版块一个表来管理的,这时候你要在首页列出各版块的名字。应该怎么办呢?
肯定得用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#实现的代码:
//====> 以人为本,关注民生 <====//
// http://blog.youkuaiyun.com/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"]);
}
}
}
}
Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1711647
SQL Server获取所有表名
本文介绍如何在SQL Server中通过查询系统视图sys.sysobjects来获取数据库内所有用户自定义表的名字,并提供了对应的SQL语句及C#实现示例。
182

被折叠的 条评论
为什么被折叠?



