[转载]获得数据库对象的方法探讨
文章作者:FangSQL SERVER
取得数据库名的方法
系统存储过程sp_helpdb
或者
USE master
SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid
sp_helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。
取得表的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的用户表:
USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'
获取指定数据库的系统表:
USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'
或者统一使用:
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner, type, sysobjects.id AS id FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U' OR type = 'S'
注:
sysobjects中type字段类型解释:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
取得列的方法
系统存储过程
USE xxxDatabase
EXEC sp_help xxxTable
或者
USE xxxDatabase
SELECT syscolumns.name AS name, systypes.name AS type FROM syscolumns LEFT JOIN systypes ON syscolumns.xtype = systypes.xtype WHERE syscolumns.id = xxxTableId
这两种方法都可以取得包括视图的列。
取得视图的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的视图:
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V'
获取指定数据库的视图的内容:
EXEC sp_helptext xxxObject
取得存储过程的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的存储过程或者扩展存储过程:
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'P' OR type = 'X'
获取指定数据库的存储过程或者扩展存储过程的内容:
EXEC sp_helptext xxxObject
无法获取加密的存储过程。扩展存储过程只能得到dll程序名。
取得函数的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的各种函数(内嵌函数等):
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'FN' OR type = 'IF' OR type = ‘TF'
获取指定数据库的函数的内容:
EXEC sp_helptext xxxObject
只能获取用户定义的函数内容。
取得触发器的方法
系统存储过程
USE xxx
EXEC sp_helptrigger xxxTable
或者
获取指定数据库的表的触发器:
SELECT sysobj1.name AS name, sysusers.name AS owner FROM sysobjects AS sysobj1 LEFT JOIN sysobjects AS sysobj2 ON sysobj1.parent_obj = sysobj2.id LEFT JOIN sysusers ON sysobj1.uid = sysusers.uid WHERE sysobj1.type = 'TR'AND sysobj2.name = 'xxxTable'
取得索引的方法
系统存储过程
USE xxx
EXEC sp_helpindex xxxTable
用户
系统存储过程
USE xxx
EXEC sp_helpuser
角色
系统存储过程
USE xxx
EXEC sp_helprole
ORACLE
特殊
页:
[1]