----系统表--------------------------------------------------------------------------------------
虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL Server 将所有数据库对象的信息均存放在系统表中,作为 SQL Server 的管理、开发人员,了解各个系统表的作用将有助于我们了解 SQL Server 的内在工作原理。
SQL Server 的系统表非常多,其中最常用的与元数据查询有关的表有如下一些:
系统表
|
描述
|
syscolumns
|
存储每个表和视图中的每一列的信息以及存储过程中的每个参数的信息。
|
syscomments
|
存储包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的原始 SQL 文本语句。
|
sysconstraints
|
存储当前数据库中每一个约束的基本信息。
|
sysdatabases
|
存储当前服务器上每一个数据库的基本信息。
|
sysindexes
|
存储当前数据库中的每个索引的信息。
|
sysobjects
|
存储数据库内的每个对象(约束、默认值、日志、规则、存储过程等)的基本信息。
|
sysreferences
|
存储所有包括 FOREIGN KEY 约束的列。
|
systypes
|
存储系统提供的每种数据类型和用户定义数据类型的详细信息。
|
将系统存储过程、系统函数、信息架构视图与系统表结合使用,可以方便地让我们获得所有需要的元数据信息。
示例:
1、 获得当前数据库所有用户表的名称。
SELECT OBJECT_NAME (id)
FROM sysobjects
WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0
其中主要用到了系统表 sysobjects以及其属性 xtype,还有就是用到了 OBJECTPROPERTY 系统函数来判断是不是安装 SQL Server 的过程中创建的对象。
2、 获得指定表上所有的索引名称
SELECT name FROM sysindexes
WHERE id = OBJECT_ID ('mytable') AND indid > 0
----系统存储过程---------------------------------------------------------------------------
系统存储过程
|
描述
|
sp_columns
|
返回指定表或视图的列的详细信息。
|
sp_databases
|
返回当前服务器上的所有数据库的基本信息。
|
sp_fkeys
|
若参数为带有主键的表,则返回包含指向该表的外键的所有表;若参数为带有外键的表名,则返回所有同过主键/外键关系与该外键相关联的所有表。
|
sp_pkeys
|
返回指定表的主键信息。
|
sp_server_info
|
返回当前服务器的各种特性及其对应取值。
|
sp_sproc_columns
|
返回指定存储过程的的输入、输出参数的信息。
|
sp_statistics
|
返回指定的表或索引视图上的所有索引以及统计的信息。
|
sp_stored_procedures
|
返回当前数据库的存储过程列表,包含系统存储过程。
|
sp_tables
|
返回当前数据库的所有表和视图,包含系统表。
|
----系统函数----------------------------------------------------------------------------------------------------
COLUMNPROPERTY
|
返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。
|
COL_LENGTH
|
返回指定数据库的指定属性值,如是否处于只读模式等。
|
DATABASEPROPERTYEX
|
返回指定数据库的指定选项或属性的当前设置,如数据库的状态、恢复模型等。
|
OBJECT_ID
|
返回指定数据库对象名的标识号
|
OBJECT_NAME
|
返回指定数据库对象标识号的对象名。
|
OBJECTPROPERTY
|
返回指定数据库对象标识号的有关信息,如是否为表,是否为约束等。
|
fn_listextendedproperty
|
返回数据库对象的扩展属性值,如对象描述、格式规则、输入掩码等。
|
----使用信息架构视图访问元数据---------------------------------------------------------------------------------------------------
信息架构视图基于 SQL-92 标准中针对架构视图的定义,这些视图独立于系统表,提供了关于 SQL Server 元数据的内部视图。信息架构视图的最大优点是,即使我们对系统表进行了重要的修改,应用程序也可以正常地使用这些视图进行访问。因此对于应用程序来说,只要是符合 SQL-92 标准的数据库系统,使用信息架构视图总是可以正常工作的。
常用的信息架构视图有以下一些:
信息架构视图
|
描述
|
INFORMATION_SCHEMA .CHECK_CONSTRAINTS
|
返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。
|
INFORMATION_SCHEMA .COLUMNS
|
返回当前数据库中当前用户可以访问的所有列及其基本信息。
|
INFORMATION_SCHEMA .CONSTRAINT_COLUMN_USAGE
|
返回当前数据库中定义了约束的所有列及其约束名。
|
INFORMATION_SCHEMA .CONSTRAINT_TABLE_USAGE
|
返回当前数据库中定义了约束的所有表及其约束名。
|
INFORMATION_SCHEMA .KEY_COLUMN_USAGE
|
返回当前数据库中作为主键/外键约束的所有列。
|
INFORMATION_SCHEMA .SCHEMATA
|
返回当前用户具有权限的所有数据库及其基本信息。
|
INFORMATION_SCHEMA .TABLES
|
返回当前用户具有权限的当前数据库中的所有表或者视图及其基本信息。
|
INFORMATION_SCHEMA .VIEWS
|
返回当前数据库中的当前用户可以访问的视图及其所有者、定义等信息。
|
由于这些信息架构都是以视图的方式存在的,因此我们可以很方便地获得并利用需要的信息。
例如,我们要得到某个表有多少列,可以使用以下语句:
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='mytable'
----应用----------------------------------------------------------------------
--1:获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0
--2:获取某一个表的所有字段
select name from syscolumns where id=object_id(N'表名')
--3:查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like N'%表名%'
--4:查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'
--5:查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
--6:查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = N'表名'
--7:获取数据库文件路径
select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('MDF',filename)>0
or
select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('LDF',filename)>0
--8:获取某一个表的基本信息
sp_MShelpcolumns N'表名'
--9:获取某一个表的主键、外键信息
exec sp_pkeys N'表名'
exec sp_fkeys N'表名'
--10:判断某一个表是否存在某一列(字段)
if exists(select 1 from syscolumns where id=object_id(N'表名) and name=N'字段')
print N'存在'
else
print N'不存在'
下面给出了一个存储过程,它的作用是自动将当前数据库的用户存储过程加密。
DECLARE @sp_name nvarchar(400)
DECLARE @sp_content nvarchar(2000)
DECLARE @asbegin int
declare @now datetime
select @now = getdate()
DECLARE sp_cursor CURSOR FOR
SELECT object_name(id)
FROM sysobjects
WHERE xtype = 'P'
AND type = 'P'
AND crdate < @now
AND OBJECTPROPERTY(id, 'IsMSShipped')=0
OPEN sp_cursor
FETCH NEXT FROM sp_cursor
INTO @sp_name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sp_content = text FROM syscomments WHERE id = OBJECT_ID(@sp_name)
SELECT @asbegin = PATINDEX ( '%AS' + char(13) + '%', @sp_content)
SELECT @sp_content = SUBSTRING(@sp_content, 1, @asbegin - 1)
+ ' WITH ENCRYPTION AS'
+ SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content))
SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']'
EXEC sp_executesql @sp_name
EXEC sp_executesql @sp_content
FETCH NEXT FROM sp_cursor
INTO @sp_name
END
CLOSE sp_cursor
DEALLOCATE sp_cursor
该存储过程利用了 sysobjects 和 syscomments 表,并巧妙地修改了原存储过程的 SQL 定义语句,将 AS 修改为了 WITH ENCRYPTION AS,从而达到了加密存储过程的目的。本存储过程在 SQL Server 2000 上通过。
<来自:http://www.cnblogs.com/Spring/archive/2008/05/28/1209092.html>
分享到:
相关推荐
通过深入理解和熟练运用这些知识点,你可以有效地利用SQL Server的存储过程和函数来构建高效、安全的数据库应用程序。实践中的案例学习,如压缩包中的“数据库学习参考例子”,将有助于巩固和深化这些理论知识。
SQL存储过程、视图、函数和触发器是SQL中的核心概念,它们在数据库设计和应用程序开发中扮演着至关重要的角色。下面将详细介绍这些概念及其重要性。 1. **SQL存储过程**: 存储过程是一组预编译的SQL语句,存储在...
在SQL Server数据库管理系统中,存储过程、函数和视图是三个重要的数据库对象,它们在数据库设计和数据操作中起着核心作用。以下是对这些概念的详细说明: **存储过程(Stored Procedure)** 存储过程是一组预编译...
SqlServer存储过程及调试指南的知识点如下: 1. 存储过程概念:存储过程是一组为完成特定功能的SQL语句集,这些语句经过编译后存储在数据库中,供用户通过指定存储过程名和参数(如有)来执行。存储过程被称作...
在SQL(Structured Query Language)中,存储过程和函数是数据库管理的重要组成部分,广泛应用于数据处理、业务逻辑封装以及性能优化。本压缩包“常用SQL工具存储过程与函数.rar”可能包含了一些常见SQL工具中用于...
本篇文章将详细介绍如何在SQL Server 2000中解密和破解存储过程、函数、视图和触发器。 首先,我们要明白SQL Server 2000的加密机制。在创建或修改这些数据库对象时,如果启用了加密选项,SQL Server会使用系统安全...
在SQL Server中,扩展存储过程(Extended Stored Procedures)是一种增强数据库功能的方法,它允许开发者创建自己的函数、存储过程和数据类型,这些功能是通过Windows动态链接库(DLL)实现的。编写安全的SQL Server...
标题“sql2000 利用存储过程导出excel”指的是在SQL Server 2000中使用存储过程来生成Excel文件的过程。这个技术在数据处理和分析时非常有用,因为它允许用户直接从数据库中导出数据到Excel格式,方便进一步的数据...
本文通过一个具体的示例,详细介绍了如何解密SQL Server 2000中的存储过程、函数、视图和触发器。通过对系统表`syscomments`和`sysobjects`的操作,我们能够重构出未加密的原始代码,这对于维护和调试这些加密对象...
GBase 8s 数据库 SQL 过程及函数应用是指在 GBase 8s 数据库中使用 SQL 过程和函数来实现特定功能的一种方式。SQL 过程和函数是已经事先编译好的 SQL 语句集合,可以被用户的应用程序调用,执行。 SQL 过程的优点...
SQL触发器、存储过程和函数是数据库管理中的重要组成部分,它们极大地增强了数据库的功能性和灵活性。在本篇文章中,我们将深入探讨这些概念,并提供实用的示例来帮助理解它们的使用和重要性。 **SQL触发器...
SQL2000是微软公司推出的SQL Server数据库管理系统的一个重要版本,它在数据库管理、数据存储和查询处理等方面具有强大的功能。在这个特定的压缩包中,我们关注的是SQL2000的存储过程、视图、函数以及触发器的解密...
在SQL Server 2000中,存储...以上知识点展示了SQL Server 2000中存储过程和XML集成的应用场景和核心功能,这些技术至今仍对数据库开发和管理有着深远影响。理解并熟练掌握这些概念,对于提升数据库管理能力至关重要。
根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...
在这个SQLServer.chm文件中,你可以期待找到关于SQL Server特定的语法、函数和存储过程的详细信息,可能包括T-SQL(Transact-SQL)的扩展功能,如游标、事务管理和触发器。T-SQL是SQL Server的扩展,提供了更强大的...
在数据库编程中,存储过程(Stored Procedure)与函数(Function)都是预编译并存储在数据库服务器上的代码块,能够提高应用程序性能,简化复杂的数据库操作,并增强数据一致性及安全性。但它们在设计目的、返回值...
《SQL Server 2000 应用系统开发教程》是一部深入浅出的教程,结合了PPT演示和源码示例,旨在帮助初学者掌握使用VB(Visual Basic)与SQL Server 2000进行应用程序开发的核心技能。在本教程中,我们将探讨以下几个...
这些问题可能涉及SQL的基本概念,如选择查询、连接查询,也可能涉及存储过程的编写和优化,或者函数的应用。通过这些题目,你可以自我检测对Oracle的理解程度,找出知识盲点,并为面试做好充分准备。 总的来说,这...
在数据库管理与开发领域,SQL Server作为一个广泛应用的数据库系统,提供了强大的存储过程功能,允许开发者在数据库层面执行复杂的逻辑操作。存储过程是存储在SQL Server中的预编译的SQL代码块,它可以通过调用执行...
SQL存储过程是一种预先编译并存储在数据库服务器中的SQL语句集合,它可以被多次调用,用于执行特定的数据操作任务。存储过程在IT领域中扮演着重要角色,特别是在数据库管理和应用程序开发中。本章主要探讨了存储过程...