程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 實用的存儲過程之二

實用的存儲過程之二

編輯:關於SqlServer

筆者工作的公司采用的是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


您正在看的SQLserver教程是:實用的存儲過程之二。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved