首页 > 开发 > 综合 > 正文

实用的存储过程之二

2024-07-21 02:09:00
字体:
来源:转载
供稿:网友
实用的存储过程之二
笔者工作的公司采用的是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 [email protected]))

  open curcol

  fetch next from curcol into @col

  while @@fetch_status=0

  begin

    execute('insert into #tablelist select '''[email protected]+''','''[email protected]+''' from '[email protected]+' where '[email protected]+'='''[email protected]+'''')

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

 
,欢迎访问网页设计爱好者web开发。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表