程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLSERVER中統計所有表的記錄數

SQLSERVER中統計所有表的記錄數

編輯:關於SqlServer
今天群裡的一個朋友問了個問題:如何把數據庫裡所有表的記錄數都統計出來?
   由於以前我曾經試著寫過一個存儲過程,作用就是刪除所有表的內容,思路是這樣的:
   首先通過sysobjects表構造一個sql語句字符串'DELETE 表名',其中表名就是sysobjects中的name列,把這些DELETE語句字符串連接起來的方法一是通過游標,二則是直接利用如下語句:
   select @sql = @sql + 'DELETE ' + name from sysobjects where xtype='U';
   這是一個很有用的技巧,在合適的地方用會很大程度的優化語句運行速度.
   然後就是通過exec(@sql)執行該字符串.
   而把數據庫所有表的記錄數統計出來和這個思路幾乎完全一樣,不同的就是把'DELETE 表名' 改為'SELECT 表名,COUNT(1) FROM 表名',主要這點不同而已,如果構造完字符串並執行完畢,可以把結果輸出到一個臨時表,那麼再統計所有記錄數就輕而易舉了.
    下面就是我寫的一個語句:

declare @sql varchar(8000),@count int,@step int

set nocount on

--@step越大運行速度越快,但如果太大會造成生成的sql字符串超出限制導致語句不完整出錯

--建議為50

set @step = 50

if object_id(N'tempdb.db.#temp') is not null

drop table #temp

create table #temp (name sysname,count numeric(18))

if object_id(N'tempdb.db.#temp1') is not null

drop table #temp1

create table #temp1 (id int identity(1,1),name sysname)

insert into #temp1(name)

select name from sysobjects where xtype = 'u';

set @count = @@rowcount while @count>0

begin

set @sql = ''

select @sql = @sql + ' select ''' + name + ''',count(1) from ' + name + ' union'
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved