cq27
asked on
Directory and statistics of each table in an SQL 2000 database
I am using SQL2000 for my database, which has 178 tables and 23 GB in MDF size. (including 30+ system files).
I wish to determine a quick way to know how big is each table and how many rows it has, how much hard disk space it is taking. May I ask how to find that out?
Thank you.
I wish to determine a quick way to know how big is each table and how many rows it has, how much hard disk space it is taking. May I ask how to find that out?
Thank you.
ASKER
Hi there
For the table size query "exec sp_spaceused 'tablename'", is there a way to display all the user tables at a go? Otherwise it will be a tedious process to check every single table out.
For the rowcount per table, when I ran this query, I receive this:
'Schema_name' is not a recognized function name.
Could you assist in this? Thank you.
For the table size query "exec sp_spaceused 'tablename'", is there a way to display all the user tables at a go? Otherwise it will be a tedious process to check every single table out.
For the rowcount per table, when I ran this query, I receive this:
'Schema_name' is not a recognized function name.
Could you assist in this? Thank you.
Hey,
I'm always using the folowing script :
This Script returns :
Number of Rows / Reserved space / Data Size / Index Size / Unused Size
The reserved Size is the Total Size of the Table ;-)
regards
poor beggar
I'm always using the folowing script :
This Script returns :
Number of Rows / Reserved space / Data Size / Index Size / Unused Size
The reserved Size is the Total Size of the Table ;-)
regards
poor beggar
CREATE PROCEDURE GetAllTableSizes
AS
/*
Obtains spaced used data for ALL user tables in the database
*/
DECLARE @TableName VARCHAR(100) --For storing values in the cursor
DECLARE @TableSchema VARCHAR(100) --For storing values in the cursor
--Cursor to get the name of all user tables from the sysobjects listing
DECLARE tableCursor CURSOR
FOR
select sysobjects.[name],sys.schemas.[name]
from sysobjects
INNER JOIN sys.schemas ON sysobjects.uid = sys.schemas.schema_id
where OBJECTPROPERTY(id, N'IsUserTable') = 1
FOR READ ONLY
--A procedure level temp table to store the results
CREATE TABLE #TempTable
(
tableName varchar(100),
numberofRows varchar(100),
reservedSize varchar(50),
dataSize varchar(50),
indexSize varchar(50),
unusedSize varchar(50)
)
--Open the cursor
OPEN tableCursor
--Get the first table name from the cursor
FETCH NEXT FROM tableCursor INTO @TableName, @TableSchema
--Loop until the cursor was not able to fetch
WHILE (@@Fetch_Status >= 0)
BEGIN
--Dump the results of the sp_spaceused query to the temp table
declare @TableFullName varchar(201)
set @TableFullName= @TableSchema + '.' + @TableName
print @TableFullName
INSERT #TempTable
EXEC sp_spaceused @TableFullName
--Get the next table name
FETCH NEXT FROM tableCursor INTO @TableName, @TableSchema
END
--Get rid of the cursor
CLOSE tableCursor
DEALLOCATE tableCursor
--Select all records so we can use the reults
SELECT *
FROM #TempTable
--Final cleanup!
DROP TABLE #TempTable
GO
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
exec sp_spaceused 'tablename'
use this to find the rowcount per table:
DECLARE @SQL NVARCHAR(255)
SET @SQL = 'DBCC UPDATEUSAGE (' + DB_NAME() + ')'
EXEC sp_executeSQL @SQL
SELECT
Schema_name(t.schema_id) AS SchemaName,
t.name AS TableName,
i.rows as [Rows]
FROM
sys.tables AS t INNER JOIN sys.sysindexes AS i
ON t.object_id = i.id AND i.indid < 2
ORDER BY
t.name
GO