Member Avatar for kohkohkoh
kohkohkoh

i have a problem on my coding, where it only show me the result of 4 tables instead of 100(for examples)..can someone check the coding flow for me. thank you

it is about checking the table and the index size(individually).
i tried for days,but still cant get the problem solved.Thank you

declare @table_name varchar(200)
declare @num_rows varchar(50)
declare @temp varchar(30)
declare @temp2 varchar(30)
declare @temp3 varchar(30)
declare @msg varchar(120)
declare @i int
declare @num_fixed_col int,
@fixed_data_size int,
@num_variable_col int, 
@max_var_size int,
@null_bitmap int,
@variable_data_size int,
@table_id int,
@num_pages int,
@table_size_in_bytes int,
@table_size_in_meg real,
@table_size_in_kbytes real,
@sysstat int,
@row_size int,
@rows_per_page int,
@free_rows_per_page int,
@fillfactor int,
@num_fixed_ckey_cols int,
@fixed_ckey_size int,
@num_variable_ckey_cols int,
@max_var_ckey_size int,
@cindex_null_bitmap int,
@variable_ckey_size int,
@cindex_row_size int,
@cindex_rows_per_page int,
@data_space_used int,
@num_pages_clevel_0 int,
@num_pages_clevel_1 int,
@num_pages_clevel_x int,
@num_pages_clevel_y int,
@Num_CIndex_Pages int,
@clustered_index_size_in_bytes int,
@num_fixed_key_cols int,
@fixed_key_size int,
@num_variable_key_cols int,
@max_var_key_size int,
@index_null_bitmap int,
@variable_key_size int,
@nl_index_row_size int,
@nl_index_rows_per_page int,
@index_row_size int,
@index_rows_per_page int,
@free_index_rows_per_page int,
@num_pages_level_0 int,
@num_pages_level_1 int,
@num_pages_level_x int,
@num_pages_level_y int,
@num_index_pages int,
@nonclustered_index_size int,
@total_num_nonclustered_index_pages int,
@free_cindex_rows_per_page int,
@tot_pages int
-- initialize variables
select @num_fixed_col =0,
@fixed_data_size =0,
@num_variable_col =0, 
@max_var_size =0,
@null_bitmap =0,
@variable_data_size =0,
@table_id =0,
@num_pages =0,
@table_size_in_bytes =0,
@sysstat =0,
@row_size =0,
@rows_per_page =0,
@num_fixed_ckey_cols =0,
@fixed_ckey_size =0,
@num_variable_ckey_cols =0,
@max_var_ckey_size =0,
@cindex_null_bitmap =0,
@variable_ckey_size =0,
@cindex_row_size =0,
@cindex_rows_per_page =0,
@data_space_used =0,
@num_pages_clevel_0 =0,
@num_pages_clevel_1 =0,
@Num_CIndex_Pages =0,
@clustered_index_size_in_bytes =0,
@num_fixed_key_cols =0,
@fixed_key_size =0,
@num_variable_key_cols =0,
@max_var_key_size =0,
@index_null_bitmap =0,
@variable_key_size =0,
@nl_index_row_size =0,
@nl_index_rows_per_page =0,
@index_row_size =0,
@index_rows_per_page =0,
@free_index_rows_per_page =0,
@num_pages_level_0 =0,
@num_pages_level_1 =0,
@num_pages_level_x =0,
@num_pages_level_y =0,
@num_index_pages =0,
@nonclustered_index_size =0,
@total_num_nonclustered_index_pages =0,
@free_cindex_rows_per_page =0,
@tot_pages =0
set nocount on 
drop table col_list
drop table col_list2
drop table COOL
create table COOL
(
TableName varchar(50),
TableSize varchar(50),
num_rows varchar(50),
NumberOfPage varchar(50),
Num_CIndex_Pages varchar(50),
Total_num_nonclustered_index_pages varchar(50)
)
create table col_list
(
colid varchar(30)
)
create table col_list2
(
indid varchar(30),
colid varchar(30)
)
DECLARE get_something CURSOR local static FOR
SELECT rows, name from sysindexes
OPEN get_something
FETCH get_something into @num_rows, @table_name
if(@@fetch_status < 0)
begin
deallocate get_something
end
while (@@fetch_status>=0)
begin
--*********************************************
-- ESTIMATE SIZE OF TABLE
--*********************************************
select @table_id = object_id(@table_name)
select @num_fixed_col = count(name), 
@fixed_data_size = sum(length) 
from syscolumns 
where id= @table_id and xtype in 
(
select xtype from systypes where variable=0
)
if @num_fixed_col= 0 --@fixed_data_size is null. change to 0
select @fixed_data_size=0
select @num_variable_col=count(name), 
@max_var_size= sum(length) 
from syscolumns 
where id= @table_id and xtype in 
(
select xtype from systypes where variable=1
)
if @num_variable_col= 0 --@max_var_size is null. change to 0
select @max_var_size=0
select @null_bitmap=2+((@num_fixed_col+7)/8)
if @num_variable_col = 0
select @variable_data_size=0
else
select @variable_data_size = 2 + (@num_variable_col *2 )+ @max_var_size
select @row_size= @fixed_data_size + @variable_data_size + @null_bitmap + 4 
select @rows_per_page = (8096) / (@row_size+2)
select @fillfactor = 100 -- initialize it to the maximum
select @free_rows_per_page = 0 --initialize to no free rows/page
select @fillfactor=OrigFillFactor 
from sysindexes 
where id = @table_id and indid=1 -- indid of 1 means the index is clustered
if @fillfactor<>0
select @free_rows_per_page=8096 * ((100-@fillfactor)/100)/@row_size
select @num_pages = ceiling(convert(dec,@num_rows) / (@rows_per_page-@free_rows_per_page))
select @data_space_used=8192*@num_pages
--**************************************************************************************************************************************
--*********************************************
-- COMPUTE SIZE OF CLUSTERED INDEX IF ONE EXISTS
--*********************************************
select @temp = colid from sysindexkeys where id= @table_id and indid=1 -- indid=1 means clustered
insert into col_list values
(
@temp
)
--**************************************************************************************************************************************
if (select count(*) from col_list) >=0 -- do the following only if clustered index exsists
begin
select @num_fixed_ckey_cols=count(name), 
@fixed_ckey_size= sum(length) 
from syscolumns 
where id= @table_id and xtype in 
(
select xtype from systypes where variable=0
) 
and colid in (select * from col_list)
if @num_fixed_ckey_cols= 0 --@fixed_ckey_size is null. change to 0
select @fixed_ckey_size=0
select @num_variable_ckey_cols=count(name), 
@max_var_ckey_size= sum(length) 
from syscolumns 
where id= @table_id and xtype in 
(
select xtype from systypes where variable=1
) 
and colid in (select * from col_list)
if @num_variable_ckey_cols= 0 --@max_var_ckey_size is null. change to 0
select @max_var_ckey_size=0
if @num_fixed_ckey_cols <> 0
select @cindex_null_bitmap=2+((@num_fixed_ckey_cols + 7)/8)
else 
select @cindex_null_bitmap=0
if @num_variable_ckey_cols <> 0
select @variable_ckey_size=2+(@num_variable_ckey_cols *2)+@max_var_ckey_size
else 
select @variable_ckey_size=0
select @cindex_row_size=@fixed_ckey_size +@variable_ckey_size+@cindex_null_bitmap+1+8
select @cindex_rows_per_page=(8096)/(@cindex_row_size+2)
if @fillfactor=0
select @free_cindex_rows_per_page = 2
else
select @free_cindex_rows_per_page= 8096 * ((100-@fillfactor)/100)/@cindex_row_size
select @num_pages_clevel_0=ceiling(convert(decimal,(@data_space_used/8192))/(@cindex_rows_per_page-@free_cindex_rows_per_page))
select @Num_CIndex_Pages=@num_pages_clevel_0
select @num_pages_clevel_x=@num_pages_clevel_0
while @num_pages_clevel_x <> 1
begin
select @num_pages_clevel_y=ceiling(convert(decimal,@num_pages_clevel_x)/(@cindex_rows_per_page-@free_cindex_rows_per_page))
select @Num_CIndex_Pages=@Num_CIndex_Pages+@num_pages_clevel_y
select @num_pages_clevel_x=@num_pages_clevel_y
end
end
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--*********************************************
-- END CLUSTERED INDEX SECTION
--*********************************************
--*********************************************
-- BEGIN NON-CLUSTERED INDEX SECTION
--*********************************************
-- create temp table with non-clustered index info
select @temp2 = indid from sysindexkeys where id= @table_id and indid<>1 -- indid=1 means clustered
select @temp3 = colid from sysindexkeys where id= @table_id and indid<>1 -- indid=1 means clustered
insert into col_list2 values
(
@temp2,
@temp3
)
--**************************************************************************************************************************************
if (select count(*) from col_list2) >=0 -- do the following only if non-clustered indexes exsist
begin
select @i=1 
while @i< 250 
begin
select @i=@i+1 
select @num_fixed_key_cols = 0,
@fixed_key_size = 0,
@num_variable_key_cols = 0,
@max_var_key_size = 0,
@index_null_bitmap = 0,
@variable_key_size = 0,
@nl_index_row_size = 0,
@nl_index_rows_per_page = 0,
@index_row_size = 0,
@index_rows_per_page = 0,
@free_index_rows_per_page = 0,
@num_pages_level_0 = 0,
@num_pages_level_x = 0,
@num_pages_level_y = 0,
@Num_Index_Pages = 0
select @num_fixed_key_cols=count(name), 
@fixed_key_size= sum(length) 
from syscolumns 
where id= @table_id and xtype in 
(
select xtype from systypes where variable=0
) 
and colid in (select colid from col_list2 where indid=@i)
if @num_fixed_key_cols= 0 --@fixed_key_size is null. change to 0
select @fixed_key_size=0
select @num_variable_key_cols=count(name), 
@max_var_key_size= sum(length) 
from syscolumns 
where id= @table_id and xtype in 
(
select xtype from systypes where variable=1
) 
and colid in (select colid from col_list2 where indid=@i)
if @num_variable_key_cols= 0 --@max_var_key_size is null. change to 0
select @max_var_key_size=0
if @num_fixed_key_cols = 0 and @num_variable_key_cols = 0 --there is no index
continue
if @num_fixed_key_cols <> 0
select @index_null_bitmap=2+((@num_fixed_key_cols + 7)/8)
else 
select @index_null_bitmap=0
if @num_variable_key_cols <> 0
select @variable_key_size=2+(@num_variable_key_cols *2)+@max_var_key_size
else 
select @variable_key_size=0
select @nl_index_row_size=@fixed_key_size +@variable_key_size+@index_null_bitmap+1+8
select @nl_index_rows_per_page=(8096)/(@nl_index_row_size+2)
select @index_row_size=@cindex_row_size + @fixed_key_size + @variable_key_size+@index_null_bitmap+1
select @index_rows_per_page = 8096/(@index_row_size + 2)
if @fillfactor=0
select @free_index_rows_per_page=0
else
select @free_index_rows_per_page= 8096 * ((100-@fillfactor)/100)/@index_row_size
select @num_pages_level_0=ceiling(convert(decimal,@num_rows)/@index_rows_per_page-@free_index_rows_per_page)
select @Num_Index_Pages=@num_pages_level_0
select @num_pages_level_x=@num_pages_level_0
while @num_pages_level_x <> 1
begin
select @num_pages_level_y=ceiling(convert(decimal,@num_pages_level_x)/@nl_index_rows_per_page)
select @Num_Index_Pages=@Num_Index_Pages+@num_pages_level_y
select @num_pages_level_x=@num_pages_level_y
end
select @total_num_nonclustered_index_pages=@total_num_nonclustered_index_pages+@Num_Index_Pages
end
end
--*********************************************
-- END NON-CLUSTERED INDEX SECTION
--*********************************************
select @tot_pages=@num_pages + @Num_CIndex_Pages + @total_num_nonclustered_index_pages
select @table_size_in_bytes= 8192*@tot_pages
select @table_size_in_kbytes= @table_size_in_bytes/1024.0
select @table_size_in_meg= str(@table_size_in_kbytes/1000.0,17,2)
insert into COOL values
(
@table_name,
@table_size_in_kbytes,
@tot_pages,
@num_pages,
@Num_CIndex_Pages,
@total_num_nonclustered_index_pages
)
FETCH get_something into @num_rows, @table_name
end

i hope that u all out there can help me.
thanks

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.