檢視資料庫表的資料量和SIZE大小的指令碼修正

2021-09-19 22:04:20 字數 3120 閱讀 5622

原文:

檢視資料庫表的資料量和size大小的指令碼修正

在使用樺仔的分享乙個sqlserver指令碼(計算資料庫中各個表的資料量和每行記錄所占用空間)的指令碼時,遇到下面一些錯誤

這個是因為這些表的schema是maint,而不是預設的dbo,造成下面這段sql在執行exec sp_spaceused @tablename時出現

msg 15009, level 16, state 1, procedure sp_spaceused, line 75

the object '***x' does not exist in database 'yoursqldba' or is invalid for this operation.

declare info_cursor cursor
for
select

'[' + [name] + ']'

from    sys.tables
where   type = 'u';
open info_cursor
fetch

next

from info_cursor into @tablename

while @@fetch_status = 0
begin
insert  into #tablespaceinfo
exec sp_spaceused @tablename
fetch

next

from info_cursor

into @tablename
end

修正後的指令碼如下所示

create

table #tablespaceinfo

(
nameinfo varchar(500) ,
rowsinfo bigint ,
reserved varchar(20) ,
datainfo varchar(20) ,
index_size varchar(20) ,
unused varchar(20)
)
declare @tablename varchar(255);
declare info_cursor cursor
for
select

'[' + s.[name] +']' +'.' + '[' + t.[name] + ']'

from    sys.tables t
inner

join sys.schemas s on t.schema_id = s.schema_id

where   type = 'u';
open info_cursor
fetch

next

from info_cursor into @tablename

while @@fetch_status = 0
begin
insert  into #tablespaceinfo
exec sp_spaceused @tablename
fetch

next

from info_cursor

into @tablename
end
close info_cursor
deallocate info_cursor
--建立臨時表
create

table [#tmptb]

(
tablename varchar(50) ,
datainfo bigint ,
rowsinfo bigint ,
spaceperrow  as ( case rowsinfo
when 0 then 0
else

cast(datainfo as

decimal(18,2))/cast(rowsinfo as

decimal(18,2))

end ) persisted
)
--插入資料到臨時表
insert  into [#tmptb]
( [tablename] ,
[datainfo] ,
[rowsinfo]
)
select  [nameinfo] ,
cast(replace([datainfo], 'kb', '') as bigint) as

'datainfo' ,

[rowsinfo]
from    #tablespaceinfo
order

bycast(replace(reserved, 'kb', '') as

int) desc

--彙總記錄
select  [tbspinfo].* ,
[tmptb].[spaceperrow] as

'每行記錄大概占用空間(kb)'

from    [#tablespaceinfo] as tbspinfo ,
[#tmptb] as tmptb
where   [tbspinfo].[nameinfo] = [tmptb].[tablename]
order

bycast(replace([tbspinfo].[reserved], 'kb', '') as

int) desc

drop

table [#tablespaceinfo]

drop

table [#tmptb]

檢視資料庫表的資料量和SIZE大小的指令碼修正

在使用樺仔的分享乙個sqlserver指令碼 計算資料庫中各個表的資料量和每行記錄所占用空間 的指令碼時,遇到下面一些錯誤 這個是因為這些表的schema是maint,而不是預設的dbo,造成下面這段sql在執行exec sp spaceused tablename時出現 msg 15009,lev...

檢視Mysql 資料庫所有表的資料量

想大概了解一下某個資料庫表的資料量的資訊,怎麼辦,不想乙個乙個的select count 1 1.檢視所有表資訊 select from information schema.tables where table schema 資料庫名稱 g 2.檢視各個表資料量 select table name...

查詢資料庫各個表的資料大小及資料量

begin查詢資料庫各個表裡的資料行數 先建立表 create table t name varchar 255 rows bigint,reserved varchar 20 data varchar 20 index size varchar 20 unused varchar 20 exec ...