数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
实用的存储过程之二

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

实用的存储过程之二

笔者工作的公司采用的是SQLServer数据库,每天都要处理大量的数据,由于笔者进公司的时间比较晚,公司现有的大部分的程序都是以前的程序员留下的,因为他们没有相关的文档,笔者对于后台数据库的很多表的结构和数据都不甚了解,给日常的维护造成了很大的麻烦。

在对后台数据库进行研究的过程中,我需要得到数据库的某些相关信息,比如,公司的数据库中有几个表存放笔者的个人资料,像人事表、工资表、部门表等等,但具体是哪些表,就不是很清楚了,如果要一个一个表地找,可能天亮了也找不完,所以我决定做一个通用的存储过程,能对当前数据库所有字符型字段进行遍历,找出精确匹配含有要查找字符串的表和字段,并且罗列出来。比如,人事表的Name字段,工资表的Salary_Name字段,部门表的Employe_Name字段都有笔者的名字,我希望能把这些找出来。存储过程如下:

IF EXISTS (SELECT name FROM sysobjects

         WHERE name = 'searchname' AND type = 'P')

   DROP PROCEDURE searchname

Go

create procedure searchname @sname varchar(10)

As

begin

create table #TableList(

  tablename  char(200),

  colname char(200)

)

 

declare @table varchar(200)

declare @col varchar(200)

 

set nocount on

declare curTab scroll cursor for select name from sysobjects where xtype='u'

open curTab

fetch next from curTab into @table

while @@FETCH_STATUS=0

begin

  declare curCol scroll cursor for select name from syscolumns where (xtype=175 or xtype=167) and (id in (select id from sysobjects where name=@table))

  open curCol

  fetch next from curCol into @col

  while @@FETCH_STATUS=0

  begin

    execute('insert into #TableList select '''+@table+''','''+@col+''' from '+@table+' where '+@col+'='''+@sname+'''')

    fetch next from curCol into @col

  end

  close curCol

  deallocate curCol

  fetch next from curTab into @table

end

close curTab

deallocate curTab

set nocount off

select  distinct * from #TableList

drop table #tablelist 

end

调用很简单,如想找笔者的名字,调用SearchName ‘forgot2000’即可,查找速度视乎当前数据库的大小而定。希望这个存储过程能对大家有所帮助吧。本人E-mail:[email protected],QQ:33563255,希望能跟大家共同交流,谢谢!

本存储过程在SQLServer7.0/2000下通过。

 




相关文章

相关软件