切入正題,下面是我寫的存儲過程,內容中每條語句做什麼都已經標識上了注釋
代碼--判斷是否存在存儲過程
if exists(select * from sysobjects where [name]='pro_selectTableAll')
begin
drop procedure pro_selectTableAll
end
go
--創建存儲過程 名稱為:pro_selectTableAll
create procedure pro_selectTableAll
(
--由於在sql編輯器中只能顯示100條信息,每次輸出多少張表 默認100
@showCount int=100,
--查詢條件 表頭包含什麼 默認空 查詢全部
@name_like varchar(50)='',
--可以由用戶自定義第幾頁
@pageIndex int=1
)
as
begin
--過程開始,設置不顯示影響行數
set nocount on
--創建標量,用於存儲共有多少表
declare @tableCount int
--循環顯示第多少條數據,也是用來循環判斷用的,同時也是座位臨時標的id使用
declare @index int
--給其賦值
set @index=1
--獲得共有多少表數據
select @tableCount=count(*) from sysobjects where [name] like (@name_like+'%')
--查看是否存在虛擬表,如果有則刪除
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#table1'))
begin
drop table #table1
end
--外面輸入的第一頁,我們要減一,原因是第一次必須是從0開始,not in 查詢的時候第一次要是總數乘以0 如:10*0 ,實現從0開始查詢
if(@pageIndex<>0)
begin
set @pageIndex=@pageIndex-1
end
--查詢出所有表名存在臨時表中
select identity(int,1,1)as id ,[name] into #table1 from (select top (@showCount) [name] from sysobjects where [name] like (@name_like+'%') and id not in (select top (@showCount*@pageIndex) [id] from sysobjects where [name] like (@name_like+'%') order by [name]) order by [name])as abc
--循環打印,沖第一條開始條件是小於等於總條數就循環
while @index<=@tableCount
begin
--判斷如果小於100條就打印,
if @index<=@showCount
begin
--創建參數存儲表名
declare @tableName varchar(200)
--循環獲得表名
select @tableName=[name] from #table1 where id=@index
--輸出當前第多少張表和表名
print '第“'+convert(varchar(20),@index)+'”張表的數據,表名為:'+@tableName
--查詢該表全部信息
execute('select * from '+ @tableName)
set @index=@index+1
end
else
begin
print '結束循環'
--結束循環
break;
end
end
--最後展示一下輸出的指定數量的表以便和咱自己查詢結果比較
select * from #table1
--存儲過程結束
end
go
因為數據過多,SQL Server 2005的顯示結果窗口會提示無法顯示更多查出來的表,最多顯示100個,沒有辦法,我就又給這個存儲過程中添加上了一個翻頁的功能,所以將他設立了3個參數,每頁顯示表數量、按表名開頭模糊查詢、當且頁數。
以上是生成存儲過程的代碼,下面是進行測試:
代碼--第幾頁
--執行存儲過程 ↓
execute pro_selectTableAll 10, 'tb_', 2
/* ↑ ↑
每頁顯示數幾條 ↑
↑
表頭,模糊查詢條件*/
--查詢信息進行比較
select top 100 * from sysobjects where [name] like ('tb_%') order by [name]
呵呵..有什麼寫的不好的地方希望大家多多提點,謝謝大家