SQL code
一、系统表 数据字典的详细信息请查SQL SERVER BOL,这里仅列出一部分。
1.1
、sysservers
1
、查看所有本地服务器及链接服务器
select
*
from
master..sysservers
1.2
、sysdatabases
1
:查询非sa创建的所有数据库
select
*
from
master..sysdatabases
where
sid
not
in
(
select
sid
from
master..syslogins
where
name
=
'
sa
'
)
--
或者
select
dbid,name
AS
DB_NAME
from
master..sysdatabases
where
sid
<>
0x01
1.3
、sysobjects
1
:获取当前数据库中的所有用户表
select
name
from
sysobjects
where
xtype
=
'
U
'
and
status
>
0
为什么要加status
>
0
,因为表dtproperties,虽然该表的xtype为U,实质上它是系统表。 dtproperties这个表里保存的是关系图,如果没建关系图,就是空的。 注意:这个表只是数据库对象的属性,如果想要看表、索引详细的属性,查看sysindexes。
2
:查看当前数据库中所有存储过程
select
name
as
存储过程名称
from
sysobjects
where
xtype
=
'
P
'
and
status
>
0
为什么要加status
>
0
,是为了去掉当前数据库中的系统存储过程。 注:该系统表中type与xtype的区别是什么? Type是在SQL SERVER
6
.0就有的,xType在SQL SERVER
7
.0才出现,Type的保留只是为了向后兼容。每种数据库对象的类型详见SQL SERVER BOL。
1.4
、syscolumns
1
:获取表或视图的所有字段,存储过程或函数的所有参数
select
name
from
syscolumns
where
id
=
object_id
(
'
表名
'
)
1.5
、sysproperties
1
:怎么把SQL SERVER中表设计和表注释读出来
--
表的注释全在sysproperties里
select
b.name,value
from
sysproperties
as
a,sysobjects
as
b
where
a.id
=
b.id
and
b.name
=
'
表名
'
1.6
、sysindexes
1
:根据聚集索引,快速查询表的行数
SELECT
rowcnt,indid
FROM
sysindexes
WHERE
id
=
OBJECT_ID
(
'
tableName
'
)
and
indid
<
2
注意:使用这种方法可能不精确,因为系统的统计信息在某些时候不一定是准确的。关于统计的维护(
dbcc
updateusage()),详见《SQL SERVER 性能优化——查询优化》series。
2
:查看索引表信息
select
table_Name
=
sysobjects.Name,index_Name
=
sysindexes.Name,Type
=
sysobjects.type,分配索引页
=
sysindexes.reserved,使用索引页
=
sysindexes.used,叶子层页
=
sysindexes.Dpages,非叶子层页
=
sysindexes.used
-
sysindexes.Dpages,rows
=
sysindexes.rowcnt
from
sysindexes
left
outer
join
sysobjects
on
sysindexes.id
=
sysobjects.id
where
sysindexes.indid
>
0
and
sysindexes.indid
<
255
and
sysindexes.status
&
64
=
0
注意:若发现非叶子层的页数为负数,最好是运行DBCC UPDATEUSAGE (
'
dbname
'
,
'
tbname
'
,
'
ixname
'
)来更新一下sysindexes的信息
1.7
、syslogins SQL SERVER 服务器的登录信息,比如:sa,有关登录、用户、角色的信息详见《SQL SERVER
2000
管理——安全——用户权限》。
select
*
from
syslogins
select
*
from
sysxlogins sysxlogins是syslogins的精简版,BOL中没有说明,不推荐使用。
1.8
、sysprocesses
1
:查看用户进程信息
select
spid,uid,syslogins.name,login_time,net_address
from
sysprocesses,syslogins
where
sysprocesses.sid
=
syslogins.sid
2
:查看数据库启动时间
select
convert
(
varchar
(
30
),
120
)
from
master..sysprocesses
where
spid
=
1
1.9
、sysdepends
1
:查看与某一个表相关的视图、存储过程、函数
select
*
from
sysdepends
where
depid
=
object_id
(
'
表名
'
)
--
或者
select
a.
*
from
sysobjects a,syscomments b
where
a.id
=
b.id
and
b.
text
like
'
%表名%
'
注意:这种查法,只适用在没有with Encryption选项,即没有加密该对象时。
--
或者
sp_depends 注意:这个表的统计信息并不准确,没有什么好的办法,查询结果只可用于参考。
1.10
、sysmessages SQL SERVER返回的内部错误都有在这里,可自行定义进行错误的添加,但一般我习惯于新建一个错误的表来定义自己程序中的错误。
select
*
From
master..sysmessages
where
error
=
5037
1.11
、sysfiles、sysfilegroups
1
、查询当前数据库的文件使用情况
select
name,filename,size
/
128
as
'
used(M)
'
,
case
maxsize
/
128
when
0
then
'
no limit
'
else
cast
(maxsize
/
128
as
varchar
(
10
))
end
as
'
total(M)
'
from
sysfiles
2
、查询当前数据库的表所在文件组
select
distinct
a.id,a.name,b.groupid,c.groupname
from
sysobjects a
inner
join
sysindexes b
on
a.id
=
b.id
inner
join
sysfilegroups c
on
b.groupid
=
c.groupid
where
a.xType
=
'
U
'
and
a.status
>
0
order
by
a.name sysfiles1是sysfiles的精简版,BOL中没有说明,不推荐使用。 二、系统视图 在master数据库中有INFORMATION_SCHEMA和system_function_schema两个用户,它们的登录是
<
无
>
,这是系统内置的两个用户。 INFORMATION_SCHEMA拥有自已的视图,在SQL Server 2000中没有被广泛使用,因为很多时候都可以从系统表中得到我们想要的结果,同样到了SQL Server 2005中,被广泛使用的仍然是sys所拥有的视图,SQL Server 2005的相关内容详见后续《SQL Server
2005
》series文章。举例如下:
1
、查询某个表的哪些字段不允许为空
select
COLUMN_NAME
from
INFORMATION_SCHEMA.COLUMNS
where
IS_NULLABLE
=
'
NO
'
and
TABLE_NAME
=
'
stb_User
'
2
、查询某个表的键约束
select
*
from
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
where
TABLE_NAME
=
'
stb_User
'
注:键约束,是指除了CHECK、
NOT
NULL外的约束,即PK,FK,
UNIQUE
,DEFAULT不是约束。 system_function_schema拥有自己的函数,在SQL Server 2000中没有被广泛使用,详见《SQL Server
2000
基础——系统函数》。
转载出处:?http://topic.csdn.net/u/20110823/13/23018853-5cdf-4165-add3-f6fea845cf3e.html