2007-06-19

如何获取SQL Server数据库元数据的方法

来源: 本站收集整理 作者:佚名 评论 0 条
 

将系统存储过程、系统函数、信息架构视图与系统表结合使用,可以方便地让我们获得所有需要的元数据信息。

示例:

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

综合实例

下面给出了一个存储过程,它的作用是自动将当前数据库的用户存储过程加密。

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 上通过。


共4页: 上一页 [1] [2] [3] 4 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:分析SQL Server中数据库的快照工作原理  
下一篇:把Access转成SQL Server的方法介绍
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号